# 数组 数组从字面上理解就是存放一组数,但在 C# 语言中数组存放的并不一定是数字,也可以是其他数据类型。 在一个数组中存放的值都是同一数据类型的,并且可以通过循环以及数据操作的方法对数组的值进行运算或操作。 数组中某个指定的元素是通过索引来访问的。 所有的数组都是由连续的内存位置组成的。最低的地址对应第一个元素,最高的地址对应最后一个元素。 C# 中数组从零开始建立索引,即数组索引从零开始。 声明数组时,方括号[]必须跟在类型后面,而不是标识符后面。 ## 定义 元素:数组的独立数据项 秩/维度:数组可以有任何为正数的维度数 维度长度:数组的每个维度有一个长度,就是这个方向的位置个数 数组长度:数组的所有维度中的元素的中和 在 C# 中,将方括号放在标识符后是不合法的语法。 ```C# int[] table; // not int table[]; ``` 另一细节是,数组的大小不是其类型的一部分,这使得可以声明一个数组并向它分配 int 对象的任意数组,而不管数组长度如何。 ## 数组的类型 - 一维数组:单行元素或者元素向量 - 多维数组:是由主向量中的位置组成的,每一个位置本身又是一个数组,称为子数组。 1. 矩形数组: - 某个维度的所有子数组有相同长度的多维数组 - 不管有多少维度,总是使用一组方括号 2. 交错数组 - 每个子数组都是独立的多维度数组 - 可以有不同长度的子数组 - 为数组的每一个维度使用一组方括号 ## 一维数组 一维数组在数组中最常用,即将一组值存放到一个数组中,并为其定义一个名称,通过数组中元素的位置来存取值。 创建一维数组的语法形式如下。 ```C# //定义数组 数据类型[] 数组名; ``` ```C# //初始化数组中的元素 数据类型[] 数组名 = new 数据类型[长度]; 数据类型[] 数组名 = {值 1, 值 2, ...}; 数据类型[] 数组名 = new 数据类型[长度]{值 1,值 2,...}; ``` 在定义数组时定义的数据类型代表了数组中每个元素的数据类型。 在使用数组前必须初始化数据,即为数组赋初值。 在初始化数组时指定了数组中的长度,也就是数组中能存放的元素个数。 在指定数组的长度后,数组中的元素会被系统自动赋予初始值,与类中段的初始化类似,数值类型的值为 0、引用类型的值为 null。 如果在初始化数组中直接对数组赋值了,那么数组中值的个数就是数组的长度。 由于在数组中存放了多个元素,在存取数组中的元素时要使用下标来存取,类似于取字符串中的字符。 ## 多维数组 在 C# 语言里多维数组中比较常用的是二维数组. 定义多维数组的语法形式如下。 ```C# //定义多维数组 数据类型[ , , ...] 数组名; ``` ```C# //创建多维数组并初始化 数据类型[ , , ...] 数组名 = new 数据类型[m,n,...] {{ , , ...},{ , , ...}}; ``` 从上面定义的语法可以看出,它与一维数组的定义非常类似,每多一个维度则在定义时的[]中增加一个“,”。 存取数组中的值也是将下标用“,”隔开。 在遍历多维数组元素时使用 GetLength(维度) 方法能获取多维数组中每一维的元素,维度也是从 0 开始的,因此在该实例中获取数组中第一维的值时使用的是 points.GetLength(0)。 在 C# 语言中不仅支持上面给出的多维数组,也支持锯齿型数组,即在多维数组中的每一维中所存放值的个数不同。 锯齿型数组也被称为数组中的数组。定义锯齿型数组的语法形式如下。 ```C# 数据类型[][] 数组名 = new 数据类型[数组长度][]; 数组名[0] = new 数据类型[数组长度]; ``` ## 数组是对象 数组实例是从 System.Array 继承的对象。 - Rank 返回数组维度数的属性 - Length 返回数组长度的属性 数组是引用类型,单数数组的元素可以是值类型也可以是引用类型。 ## foreach 循环用法详解 C# foreach 循环用于列举出集合中所有的元素,foreach 语句中的表达式由关键字 in 隔开的两个项组成。 in 右边的项是集合名,in 左边的项是变量名,用来存放该集合中的每个元素。 该循环的运行过程如下:每一次循环时,从集合中取出一个新的元素值。放到只读变量中去,如果括号中的整个表达式返回值为 true,foreach 块中的语句就能够执行。 一旦集合中的元素都已经被访问到,整个表达式的值为 false,控制流程就转入到 foreach 块后面的执行语句。 foreach 语句经常与数组一起使用,在 C# 语言中提供了 foreach 语句遍历数组中的元素,具体的语法形式 如下。 ```C# foreach(数据类型 变量名 in 数组名) { //语句块; } ``` 这里变量名的数据类型必须与数组的数据类型相兼容。 在 foreach 循环中,如果要输出数组中的元素,不需要使用数组中的下标,直接输出变量名即可。 foreach 语句仅能用于数组、字符串或集合类数据类型。