您的位置:首页 > 编程语言 > C#

《csharp高级编程》 学习笔记 第五章 数组

2011-10-05 20:20 127 查看
第五章 数组

5.1 简单数组

5.1.1 数组的声明

int [] myArray;

5.1.2 数组的初始化

myArray=new int [4];

int[] myArray = new int[4] {4, 7, 11, 2};

int[] myArray = new int[] {4, 7, 11, 2};

int[] myArray = {4, 7, 11, 2};

5.1.3 访问数组元素

for (int i = 0; i < myArray.Length; i++)

{

Console.WriteLine(myArray[i]);

}

等价于

foreach (int val in myArray)

{

Console.WriteLine(val);

}

5.1.4 使用引用类型

Person[] myPersons = new Person[2];

Person[] myPersons = {new Person("Ayrton", "Senna"),

new Person("Michael", "Schumacher") };

5.2 多维数组

int[,] twodim = new int[3, 3];//二维数组

twodim[0,0] = 1;

twodim[2,2] = 9;

数组在初始化时应指定每一维的大小(也称为阶)

提示:

数组声明之后,就不能修改其阶数。

int[,] twodim = {

{1, 2, 3},

{4, 5, 6},

{7, 8, 9},

};

5.3 锯齿数组

每一行都可以有不同的大小。

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

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

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

jagged[2] = new int[3] {9, 10, 11};

5.4 Array类

用括号声明数组是csharp中使用Array类的记号。

在后台使用csharp语法,会创建一个派生于抽象基类Array的新类。

例如前面使用的Length属性。

5.4.1 属性

5.4.2 创建数组

Array类是一个抽象类,所以不能使用构造函数来创建数组。

不过除了使用csharp语法创建数组实例之外,

还可以使用静态方法CreateInstance()创建数组。

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

for (int i = 0; i < 5; i++)

{

intArray1.SetValue(33, i);

}

还可以将已创建的数组强制转换成声明为int[]的数组:

int[] intArray2 = (int[])intArray1;

CreateInstance()方法有许多重载版本,可以创建多维数组和不基于0 的数组。

用到的时候再查msdn。

5.4.3 复制数组

牢记数组是引用类型。

所以将一个数组变量赋予另一个数组变量,就会得到两个指向同一个数组的变量。

而复制数组,要使数组实现ICloeable 接口。

这个接口定义的Clone()方法会创建数组的浅副本:

*如果数组的元素是值类型,就会复制所有的值。

*如果数组包含引用类型,只复制引用,不复制元素。

还可以使用Array.Copy()方法创建浅副本。

但两者有重要区别:

Clone()方法会创建一个新数组,而Copy()方法只是传送了阶数相同,有足够元素空间的已有数组。

*注意:

如果需要包含引用类型的数组的深副本,就必须迭代数组,创建新对象。

5.4.4 排序

Array类实现了对数组中元素的冒泡排序。

Sort()方法需要数组中的元素实现IComparable接口。

*提示:

Array类还提供Sort方法,它需要将一个委托作为变元。

5.5 数组和集合接口

5.6 枚举

在foreach语句中使用枚举,可以迭代集合中的元素。

且无需知道集合中的元素个数。

5.6.1 IEnumerator 接口

5.6.2 foreach语句

foreach使用IEnumerator接口的属性和方法。

5.6.3 yield语句

c# 2.0 添加了yield语句,以便于创建枚举器。

yield return 语句返回集合的一个元素,并移动到下一个元素上。

yield break 可停止迭代。

public class HelloCollection

{

public IEumerator GetEumerator()

{

yield return "Hello";

yield return "World";

}

}

*包含yield 语句的方法或属性也称为迭代块。

迭代块必须声明为返回IEnumerator 或IEnumerable接口。

这个块可以包含多个yield return 语句或yield break 语句,但不能包含return 语句。

现在就可以用foreach语句迭代集合:

HelloCollection helloCollection = new HelloCollection();

foreach (string s in helloCollection)

{

Console.WriteLine(s);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: