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();

 

运行结果:

 

 

⑤⑥⑦⑧

 

 

 

posted @ 2013-05-26 10:43  夜曲984  阅读(457)  评论(0编辑  收藏  举报