c#中的数组使用
数组是在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来的一种形式。通俗点说:数组就是一个变量的索引列表,存储在数组类型的变量中。
数组有一个基本类型,数组中的每个条目都是这种类型。
1.数组的声明:类型[] 名称
类型可以是任何变量类型,名称是编者自己取得方便读写的名称,数组在访问之前必须初始化。如下是错误的:
int[] arraySort; arraySort[0] = 10;
数组的初始化有两种方式:
①使用字面值初始化指定数组:需用逗号隔开元素值列表如
string[] nameList = {"aaaaa","bbbbb","ccccc","ddddd","eeeee"};
指定一个5个元素的nameList数组。
②使用关键字new显示初始化数组:
int[] arraySort = new int[10];
这种初始化后的数组,系统默认给每个元素赋初值,可以测试一下:
1 int[] arraySort = new int[5]; 2 string[] nameList = new string[5]; 3 for (int i=0;i<5;i++) 4 { 5 Console.WriteLine(arraySort[i]); 6 Console.WriteLine(nameList[i]); 7 } 8 Console.ReadKey();
运行结果:
结果int型数组元素初始值为0,字符串的初始值为空。
在使用new关键字初始化时,可以使用非常量的变量初始化,主要与后面的区别:
int arraySize = 5; int[] arrayTest=new int[arraySize];
③可以使用以上两种方式的组合初始化数组:
string[] nameList = new string[5]{ "aaaaa", "bbbbb", "ccccc", "ddddd", "eeeee" };
使用这种方式,数组大小必须与列表元素个数相同。
string[] nameList = new string[10]{ "aaaaa", "bbbbb", "ccccc", "ddddd", "eeeee" };
系统报错:
如果使用变量利用这种方式初始化数组,则变量必须是常量:
int arraySize = 5; string[] nameList = new string[arraySize]{ "aaaaa", "bbbbb", "ccccc", "ddddd", "eeeee" };
系统报错:
正确写法:
const int arraySize = 5; string[] nameList = new string[arraySize]{ "aaaaa", "bbbbb", "ccccc", "ddddd", "eeeee" };
④打印数组中的值:
可以将数组中的元素打印出来,最常用的就是for循环语句:
1 const int arraySize = 5; 2 string[] nameList = new string[arraySize]{ "aaaaa", "bbbbb", "ccccc", "ddddd", "eeeee" }; 3 for (int j = 0; j < nameList.Length;j++ ) 4 { 5 Console.WriteLine(nameList[j]); 6 } 7 Console.ReadKey();
在数组中array中,去数组的长度是使用array.Length。而在arrayList动态数组中是使用的array.Count。
在数组中使用使用for循环语句打印数组中的元素,最常见的问题是越界问题。
1 const int arraySize = 5; 2 string[] nameList = new string[arraySize]{ "aaaaa", "bbbbb", "ccccc", "ddddd", "eeeee" }; 3 for (int j = 0; j < 6;j++ ) 4 { 5 Console.WriteLine(nameList[j]); 6 } 7 Console.ReadKey();
编译的时候系统报错:
所以在打印数组中,foreach语句是个不错的选择:
1 int[] arraySort = new int[5] {0,1,2,3,4}; 2 foreach(int i in arraySort) 3 { 4 Console.WriteLine(arraySort[i]); 5 } 6 Console.ReadKey();
使用foreach语句不会发生越界问题,它与for语句的区别在于foreach循环语句对数组中的元素进行只读访问,而不能改变任何元素的值。
1 int[] arraySort = new int[5]; 2 foreach(int i in arraySort) 3 { 4 arraySort[i] = i; 5 Console.WriteLine(arraySort[i]); 6 } 7 Console.ReadKey();
测试的目的是把值写入数组中,并打印,可是并没有写入数据。运行结果如下:
2.多维数组:
①多维数组的声明:类型[,,,] 名称
其中要声明一个N维数组,则括弧中需要添加N-1个逗号。
多维数组和一维数组没多大区别,只是声明和访问的时候也必须是使用二维的索引:
1 double[,] arrayNumber =new double[3,4]; 2 Console.WriteLine("数组的长度为{0}", arrayNumber.Length); 3 for (int i = 0; i < 3;i++ ) 4 { 5 for (int j = 0; j < 4;j++ ) 6 { 7 Console.WriteLine(arrayNumber[i, j]); 8 } 9 } 10 Console.ReadKey();
以上使用的是指明了索引值,精确的指定到了所要访问的元素,下面使用foreach元素试试看打印结果是什么:
1 double[,] arrayNumber = new double[3, 4]; 2 foreach (int j in arrayNumber) 3 { 4 Console.WriteLine(arrayNumber); 5 } 6 Console.ReadKey();
运行结果:
②
③
④
⑤⑥⑦⑧