C#数组教程
第二篇:C#数组教程之2
一、数组概述
·数组是一组具有相同类型和名称的变量的集合。
·这些变量称为数组的元素,每个数组元素都有一个编号,这个编号叫做下标,我们可以通过下标来区别这些元素。
·数组元素的个数被称为数组的长度。
·一般情况下,数组的元素类型必须相同。但在PHP等中有所改变。
·C#中,数组是System.Array类的一个实例。
·优缺点:优点:高效访问给定下标的元素,编程简单、直观。缺点:实例化时必须指定数组的大小,之后不能增删元素(也就是非动态)。
C#中的数组:
· C# 数组中每个元素的类型必须相同;
· C# 数组的下标是从 0 开始;
· C# 中没有动态数组,但可以用ArrayList实现类似动态数组的功能;
· C# 中支持多维数组及交错数组(Jagged Array)。
C# 支持一维数组、多维数组(矩形数组)和锯齿型数组(或叫交错数组,数组的数组)。
二、声明、实例化和初始化数组
1.声明数组
下面的示例展示如何声明不同类型的数组:
一维数组:
int[] numbers;
多维数组:
string[,] names;
交错数组(数组中的数组):
byte[][] scores;
2、实例化数组
声明数组(如上所示)并不实际创建它们。在 C# 中,数组是对象(事实上,C#和.NET Framework中的所有东西都是对象),必须进行实例化。下面的示例展示如何创建数组:
一维数组:
int[] numbers = new int[5];
常见问题:
int[3] arr; //错误,不能这样指定数组大小
应该是:
int[] arr = new int[3]; //正确,声明一个长度为 3 的 int 类型数组,[]中的数字表示长度不是下标的上界。
多维数组:
string[,] names = new string[5,4];
交错数组(锯齿数组或“数组的数组”):
交错数组是指数组的元素又是一个数组,这和多维数组是不一样的,也就是说,交错数组就是“数组的数组”。
byte[][] scores = new byte[5][];
for (int x = 0; x < scores.Length; x++)
{
scores[x] = new byte[4];
}
还可以有更大的数组。例如,可以有三维的矩形数组:
int[,,] buttons = new int[4,5,3];
甚至可以将矩形数组和交错数组混合使用。例如,下面的代码声明了类型为 int 的二维数组的三维数组的一维数组。
int[][,,][,] numbers;
声明数组
int[][] arr = new int[3][];
arr[0] = new int[7];
arr[1] = new int[8];
arr[2] = new int[9];
以上数组中 arr 是一个长度为 3 的数组。
arr 的第一个元素是一个长度为 7 的数组,第二个元素是一个长度为 8 的数组,第三个元素是一个长度为 9 的数组。
一定注意: int[][] arr = new int[3][]; 不能写成 int[] arr = new int[3];
另外,初始化时第二个中括号中也不能有数值。
3、初始化数组
C# 通过将初始值括在大括号 ({}) 内为在声明时初始化数组提供了简单而直接了当的方法。下面的示例展示初始化不同类型的数组的各种方法。
如上述的numbers可以用下面方式初始化:
numbers[0] = 1;
numbers[1] = 2;
numbers[2] = 3;
numbers[3] = 4;
numbers[4] = 5;
上述初始化方式很不简洁,较简洁的方式是:
numbers = new int[]{1,2,3,4,5};
4.简洁化的做法
事实上,可以将声明、实例化和初始化放在一起,变得更加简洁方便,比如:
一维数组
声明数组并赋初值
int[] numbers = new int[]{1,2,3,4,5,6}; //不定长
int[] numbers = new int[5] {1, 2, 3, 4, 5};//定长
string[] names = new string[3] {"Matt", "Joanne", "Robert"};
Note: [] 跟在类型名之后表示是个数组,{} 表示要赋的初值列表,各个初值之间用英文逗号(,)隔开。
可省略数组的大小,如下所示:
int[] numbers = new int[] {1, 2, 3, 4, 5};
string[] names = new string[] {"Matt", "Joanne", "Robert"};
如果提供了初始值设定项,则还可以省略 new 运算符,如下所示:
int[] numbers = {1, 2, 3, 4, 5};
string[] names = {"Matt", "Joanne", "Robert"};
C# 数组也支持动态指定
int len = 3;
int[] arr = new int[len];
多维数组
int[,] numbers = new int[3, 2] { {1, 2}, {3, 4}, {5, 6} };//定长
第一维的长度为 3,第二维的长度为 2。
string[,] siblings = new string[2, 2] { {"Johnson","Ju"}, {"Mary","Albert"} };
可省略数组的大小,如:
int[,] numbers = new int[,] { {1, 2}, {3, 4}, {5, 6} };
string[,] siblings = new string[,] { {"Johnson","Ju"}, {"Mary","Albert"} };
如提供了初始值设定项,则还可以省略 new 运算符,如:
int[,] numbers = { {1, 2}, {3, 4}, {5, 6} };
赋值为“横向扫描”赋值,该例相当于:
numbers[0, 0] = 1;
numbers[0, 1] = 2;
numbers[1, 0] = 3;
numbers[1, 1] = 4;
numbers[2, 0] = 5;
numbers[2, 1] = 6;
string[,] siblings = { {"Johnson", "Ju"}, {"Mary", "Albert"} };
交错的数组(数组的数组)
可以像下例所示那样初始化交错的数组:
int[][] numbers = new int[2][] { new int[] {2,3,4}, new int[] {5,6,7,8,9} };
可省略第一个数组的大小,如下所示:
int[][] numbers = new int[][] { new int[] {2,3,4}, new int[] {5,6,7,8,9} };
或:
int[][] numbers = { new int[] {2,3,4}, new int[] {5,6,7,8,9} };
请注意,对于交错数组的元素没有初始化语法。
int[][] arr = new int[2][];
numbers[0] = new int[3];
numbers[1] = new int[5];
numbers[0][0] = 2;
如果此时设置:
numbers[0][2] = 6;那么:
numbers = { new int[] {2,3,6}, new int[] {5,6,7,8,9} };
我们可以把numbers当作一个一维数组来对待,数组的数组又可以当作一维数组来对待。
交错数组也可以是“数组的数组的数组”,以此类推:
int[][][] arr = new int[3][][];
arr[0] = new int[7][];
arr[0][0] = new int[3];
//...
注意 如果在声明时没有初始化数组,则数组成员将自动初始化为该数组类型的默认初始值。另外,如果将数组声明为某类型的字段,则当实例化该类型时它将被设置为默认值 null。
三、数组的赋值取值
1、访问数组成员
访问数组成员可以直接进行,类似于在 C/C++ 中访问数组成员。
(1)位置定位法
例如:
int[] arr = new int[3];
arr[0] = 10; //给第一个元素赋值
int m = arr[0]; //取第一个元素的值
下面的代码创建一个名为 numbers 的数组,然后向该数组的第五个元素赋以 5:
int[] numbers = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
numbers[4] = 5; //注意索引是从0开始
下面的代码声明一个多维数组,并向位于 [1, 1] 的成员赋以 5:
int[,] numbers = { {1, 2}, {3, 4}, {5, 6}, {7, 8}, {9, 10} };
numbers[1, 1] = 5;
下面声明一个一维交错数组,它包含两个元素。第一个元素是两个整数的数组,第二个元素是三个整数的数组:
int[][] numbers = new int[][] { new int[] {1, 2}, new int[] {3, 4, 5}
};
下面的语句向第一个数组的第一个元素赋以 58,向第二个数组的第二个元素赋以 667:
numbers[0][0] = 58;
numbers[1][1] = 667;
(2)循环访问法
对数组使用 foreach
C# 还提供 foreach 语句。该语句提供一种简单、明了的方法来循环访问数组的元素。例如,下面的代码创建一个名为 numbers 的数组,并用 foreach 语句循环访问该数组:
int[] numbers = {4, 5, 6, 1, 2, 3, -2, -1, 0};
foreach (int i in numbers)
{
System.Console.WriteLine(i);
}
由于有了多维数组,可以使用相垃圾广告法来循环访问元素,例如:
int[,] numbers = new int[3, 2] {{1, 11}, {2, 22}, {3, 33}};
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14601556/viewspace-557617/,如需转载,请注明出处,否则将追究法律责任。