C#数组教程 第二篇:C#数组教程之2 第三篇:C#数组教程之3
I、基础部分 一、数组概述 ·数组是一组具有相同类型和名称的变量的集合。 ·这些变量称为数组的元素,每个数组元素都有一个编号,这个编号叫做下标,我们可以通过下标来区别这些元素。 ·数组元素的个数被称为数组的长度。 ·一般情况下,数组的元素类型必须相同。但在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}}; <SPA |
|