C#高级编程 (第六版) 学习 第五章:数组

时间:2021-07-15 09:48:47

第五章 数组

1,简单数组

声明:int[] myArray;

初始化:myArray = new int[4]; 为数组分配内存。

还可以用如下的方法:

int[] myArray = new int[4]{1,2,3,4};

int[] myArray = new int[]{1,2,3,4};

int[] myArray = {1,2,3,4};

如果数组中的元素是引用类型,必须为每个数组分配内存:

public class Person

{

public string FirstName { get; set; }

public string LastName { get; set; }

public Person()

{

}

public Person(string firstName, string lastName)

{

this.FirstName = firstName;

this.LastName = lastName;

}

public override string ToString()

{

return String.Format("First name:{0}\nLast name:{1}", FirstName, LastName);

}

}

Person[] myPersons = new Person[2];

myPersons[0] = new Person{"Ayrton","Senna"};

myPersons[1] = new Person{"Michael", "Schumacher"};

也可以

Person[] myPersons = {new Person("A","B")};

如果不用new,会报错。

2,多维数组

声明和使用多维数组:

int [,] twoDim = new int[3,3];

twoDim[0,0] = 1;

twoDim[2,,2] = 10;

数组声明之后,就不能改变其维数了。

3,锯齿数组

每一行都有不同的大小

int[][] jagged = new int[3][];

jagged[0] = new int[2]{1,2};

jagged[1] = new int[6]{1,2,3,4,5,6};

jagged[2] = new int[3]{1,2,3};

4, Array类

创建数组

Array myArray = Array.CreateInstance(typeof(int), 5);

复制数组

实现了IClonable接口

Array.Clone():创建数组的浅表副本

Array.CopyTo:传送已有副本

排序:实现了IComparable接口

5,数组和集合接口

Array类实现了IEnumable、ICollection和IList接口

ICollection接口派生于IEnumable接口,添加了如下属性和方法

属性和方法

说明

Count

集合中元素的个数,和Length相同

IsSynchronized

SyncRoot

IsSynchronized确定集合是否线程安全的。数组是false,对于同步访问,SyncRoot可以用于线程安全的访问

CopyTo

将数组的元素复制到已有数组中,类似于静态的Array.CopyTo

IList

IList接口派生于ICollection接口,

接口函数和属性

说明

Add()

向集合中添加元素

Clear()

清除数组中所有的元素

Contains()

确定某个元素是否在数组中,返回为true或者false。

Indexof()

对数组元素进行线性搜索,返回找到的第一个元素的索引。为找到返回-1.

Insert()

Remove()

RemoveAll()

对集合,插入,删除,删除全部。

对数组,不支持,抛异常。

IsFixedSize

数组大小是固定的,返回true

IsReadOnly

是否可以读写

Item

使用整型索引访问数组

6,枚举

IEnumerator接口

接口的方法和属性

说明

MoveNext()

移动到集合的下一个元素上,有,true,结尾,false

Currnet()

返回光标所在的元素

Reset()

将光标重新定位到开头

foreach语句解析

数组或者集合执行带GetEumerator()方法的IEnumerable接口。GetEnumerator返回一个执行IEnumerable接口的枚举。然后使用枚举迭代集合。

foreach(Person p in persons)

{

Console.WriteLine(p);

}

IEnumerator enumerator = persons.GetEnumerator();

while(enumerator.MoveNext())

{

Person p = (Person)enumerator.Current;

Console.WriteLine(p);

}

yield语句

C#2.0添加了yield语句,用于创建枚举器。

public class HelloCollection

{

public IEnumerator<string> GetEnumerator()

{

yield return "Hello";

yield return "World";

}

}

HelloCollection h = new HelloCollection();

foreach (string s in h)

{

Console.WriteLine(s);

}

C#高级编程 (第六版) 学习 第五章:数组的更多相关文章

  1. C&num;高级编程 &lpar;第六版&rpar; 学习 第七章:委托和事件

    第七章 委托和事件 回调(callback)函数是Windows编程的一个重要方面,实际上是方法调用的指针,也称为函数指针. .Net以委托的形式实现了函数指针的概念,.Net的委托是类型安全的. 委 ...

  2. C&num;高级编程 &lpar;第六版&rpar; 学习 第四章:继承

    第四章 继承 1,继承的类型 实现继承: 一个类派生于一个基类型,拥有该基类型所有成员字段和函数. 接口继承 一个类型只继承了函数的签名,没有继承任何实现代码.   2,实现继承 class MyDe ...

  3. C&num;高级编程 &lpar;第六版&rpar; 学习 第三章:对象和类型

    第三章 对象和类型 1,类和结构 类存储在托管堆上 结构存储在堆栈上   2,类成员 类中的数据和函数称为类成员 数据成员 数据成员包括了字段.常量和事件   函数成员 方法:与某个类相关的函数,可以 ...

  4. C&num;高级编程 &lpar;第六版&rpar; 学习 第六章:运算符和类型强制转换

    第六章 运算符和类型强制转换 1,运算符 类别 运算符 算术运算符 + - * / % 逻辑运算符 & | ^ ~ && || ! 字符串连接运算符 + 增量和减量运算符 ++ ...

  5. C&num;高级编程 &lpar;第六版&rpar; 学习 第一章:&period;Net体系结构

    第一章 .Net体系结构 1,公共语言运行库(Common Language Runtime, CLR) .Net Framework的核心是其运行库的执行环境,称为公共语言运行库,或.Net运行库. ...

  6. C&num;高级编程&lpar;第六版&rpar;学习:第三十一章:Windows窗体

    第三十一章 Windows窗体 创建Windows窗体应用程序 在文本编辑器中输入: /* * form.cs * a simple windows form * */ using System; u ...

  7. C&num;高级编程 &lpar;第六版&rpar; 学习 第二章:C&num;基础

    第二章 基础 1,helloworld示例: helloworld.cs using System; using System.Collections.Generic; using System.Li ...

  8. c&num;高级编程第七版 学习笔记 第一章 &period;NET体系结构

    第一章      .NET体系结构 本章内容: 编译和运行面向.NET的代码 Microsoft中间语言(Microsoft Intermediate Language,MSIL或简称IL)的优点 值 ...

  9. c&num;高级编程第七版 学习笔记 第二章 核心c&num;

    第二章 核心C# 本章内容: 声明变量 变量的初始化和作用域 C#的预定义数据类型 在c#程序中使用条件语句.循环和跳转语句执行流 枚举 名称空间 Main()方法 基本的命令行c#编译器选项 使用S ...

随机推荐

  1. JDBC&lowbar;part4&lowbar;大对象&lowbar;DAO&lowbar;Bean&lowbar;DButi

    本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! JDBCday04_大对象_Dao_DBUtil_Ja ...

  2. &lbrack;Shell&rsqb; 文件名截取的问题&colon;bash &period;vs&period; csh

    参考: http://bbs.chinaunix.net/thread-1825455-1-1.html 但是, 经常处理更复杂的文件名, 这里给出一个加长版的例子, 换汤不换药. 查询当前shell ...

  3. Qt计算器开发&lpar;二&rpar;:信号槽实现数学表达式合法性检查

    表达式的合法性 由于我们的计算器不是单步计算的,所以我们能够一次性输入一个长表达式.然而假设用户输入的长表达式不合法的话,那么就会引发灾难.所以有必要对于用户的输入做一个限制. 一些限制举例: 比方, ...

  4. SSH阅读笔记

    1.SSH单阶人脸段检测器,在不同层检测不同scale的人脸,而不是使用mtcnn中金字塔的方式,从而实现加速. 2.SSH的整体结构,3个module的stride分别为8,16,32,使用不同的感 ...

  5. 精读Hadamard Response论文

    一.摘要 主要研究问题基于本地化差分隐私的k-分布,之前最佳的算法要求的是线性通信代价(k),而服务器计算时间的n*k,n表示所有的用户样本. 作者提出的HR不要求共享随机性,并且每个用户输入的数据都 ...

  6. HDU 2444 二分图判断 &lpar;BFS染色&rpar;&plus;【匈牙利】

    <题目链接> 题目大意: 有N个人,M组互相认识关系互相认识的两人分别为a,b,将所有人划分为两组,使同一组内任何两人互不认识,之后将两个组中互相认识的人安排在一个房间,如果出现单人的情况 ...

  7. Linux anaconda 内网 安装 卸载

    安装并不难, 官网介绍的很清楚, 但每次到官网找安装方法不方便,我总结了本文(很全) 官网下载Linux版anaconda, 地址https://www.anaconda.com/download/# ...

  8. deep learning自学知识积累笔记

    推荐系统的演变过程 协同过滤(英雄所见略同)思想为类似喜好的人的选择必然也类似.比如小学男生普遍喜欢打手游,中年大叔普遍喜欢射雕英雄传 随后有了SVD奇异值分解,但是SVD要求不能太稀疏,因此有了隐语 ...

  9. Flink流处理之迭代案例

    当前Flink将迭代的重心集中在批处理上,之前我们谈及了批量迭代和增量迭代主要是针对批处理(DataSet)API而言的,而且Flink为批处理中的迭代提供了针对性的优化. 可是对于流处理(DataS ...

  10. pycharm如何快速替换代码中的字符

    使用快捷键: ctrl+r:快速定位到替换栏,选择要替换的关键字即可方面快捷,特别适用于重复造文字的代码编程上 废话不多少,上图说话硬气: