第五章 数组(一)
1. 简单数组
数组是引用类型,数组的初始化必须指定大小。如果无法指定可以使用集合。(集合是后面的内容)
数组元素是值类型(此时的值类型存在托管堆上)

数组元素是引用类型

2.多维数组
多维数组的定义 二维:int[,] 三维: int[,,]
ex 三维数组的声明:int[,,] threedim={
{{1,2},{3,4}},
{{5,6},{7,9}}
};
3 锯齿数组

ex 锯齿数组定义:
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};
锯齿数组的访问
for(int row=0;row<jagged.Length; row++)
{
for(int element =0; element <jagged[row].Length;element)
{
Console.WriteLine(jagged[row].[element]);s
}
}
4 Array类
Array类是一个抽象类,不能使用构造函数来创建数组。可以使用静态方法CreateInstance()创建数组。如果事先不知道元素的类型,就可以使用该静态方法。
ex : Array intArray1 =Array.CreateInstance(typeof(int),5);
for(int i=0; i<5; i++)
{
intArray1.SetValue(33,i);
}
for(int i=0; i<5; i++)
{
Console.WriteLine(intArray1.GetValue(i));
}
强制转换 int[] intArray2 =(int[]) intArray1;
CreateInstance() 方法有许多重载版本。可以创建多维数组和不基于0下标的数组。
ex: int[] lengths={2,3};定义维数
int[] lowerBounds ={1,10}; 定义开始下标
Array racers=Array.CreateInstance(typeof(Person),lengths,lowerBounds);
数组复制:IClonable 接口定义的Clone()方法会创建数组的浅副本。如果数组元素是值类型,会复制所有的值。如果元素是引用类型,只复制引用。改变复制后的值,原数组的值也会改变。
Clone() 和 Array.copy()的区别: Clone()会创建一个新的数组。Copy() 只是将原数组拷贝到另外一个已经存在的结束相同,有足够元素空间的数组中。
排序:(这个我有被笔试到,很不幸那个时候不知道该怎么做。)
Array的 Sort方法需要数组中的元素实现IComparable接口。 string 和 int 实现了这个接口,所以可以对包含这些类型的元素排序。
对于定制的类要实现IComparable 的CompareTo()方法。这个方法在类中实现
ex (ps: 我懒啊。代码都不敲的,直接贴图。会有报应的!!)

也可以实现IComparer 接口的Compare()方法。(PS:已经贴了一次,索性贴到底啊。报应啊,报应。)

使用 Array(persons,new PersonComparer(PersonComparer.PersonCompareType.Firstname));
发现自己写的越来越多,感觉什么都不能少一样。抓不住重点。一个数组还要分成两个部分写。。。效率啊。。。
浙公网安备 33010602011771号