【五】数组

int [] pins;
int [,] items = new int [4,6];//初始化一个长6宽4的二维数组
items[4,6] = 99;//给i=4,j=6的位置赋值99
数组维数无限制,但是要小心内存不够用
Time [] times;
数组元素还可以是结构、枚举或者类。
最好为数组变量取一个复数名称

var names = new[]{"John","Diana","James","Francesca"};
Length是数组的属性(property)而不是方法,所以调用它时不需要使用圆括号。
记得数组编号是从0开始
可以用foreach的方法遍历整个数组如
int [] pins = {9,3,7,2};
foreach(int pin in pins)
{
Console.WriteLine(pin);
}
foreach语句声明了一个循环变量(本例是int pin)它自动获取数组中每个元素的值。
注意:foreach只能遍历所有元素,当你需要遍历部分的时候使用for;
foreach遍历的是从前往后,如果需要反向变量则需要使用for;
如果循环的主体需要知道元素的索引,而非只是值需要用for;
如果需要修改数组元素的值则必须用for,因为foreach循环的副本。

前面有说数组是引用类型。这就意味着和其他引用类型一样在复制了一个数组变量后,将获得对同一个数组实例的两个引用。
int [] pins = {9,3,7,2};
int [] alias = pins;//实则引用同一个数组实例
当修改了其中一个,另一个也被修改了

在复制数组的时候,除了我们能想到的逐个元素的赋值外,还有如下方法:
int [] pins = {9,3,7,2};
int [] copy = new int[pins.Length];
pins.CopyTo(copy,0);
//--------------------------
int [] pins = {9,3,7,2};
int [] copy = new int[pins.Length];
Array.Copy(pins,copy,copy.Length);
//--------------------------目标数组在调用Copy之前必须初始化
int [] pins = {9,3,7,2};
int [] copy = (int[])pins.Clone();
//----------这里需要说明一个,Clone方法实际返回的是一个object
//所以在调用的时候必须强制转换成具有恰当类型的一个数组
用以上方法复制的数组,创建的都是数组的一个【浅拷贝】
数组如果包含引用的话,CopyTo,Copy,Clone只是复制引用,不会复制被引用的对象,复制后都会引用同一组对象。

posted on 2015-01-22 15:32  相东  阅读(155)  评论(0编辑  收藏  举报

导航