数组相关
1 概述
- 表示了一组特定类型且数量固定的变量(元素)。
- 数组的元素总是按照先后顺序存储在连续的内存块里,读取效率高。
- 所有是数组都继承于
System.Array
类。 - 数组元素访问从 0 开始。
2 数组定义与初始化
2.1 一维数组
int[] arr1 = new int[3]; // 之后需要逐个赋值
int[] arr2 = new int[3] {1, 2, 3};
int[] arr2 = new int[] {1, 2, 3};
int[] arr3 = {1, 2, 3};
2.2 多维数组
2.2.1 矩形数组
矩形数组代表 n 维的内存块,每行的元素个数是一样的。
-
定义好数组的行数和列数,逐个赋值:
// int[, ] arrayName = new int[numRows, numCols]; int[, ] arr1 = new int[2, 3]; for (int i = 0; i < arr.GetLength(0); i++) { for (int j = 0; j < arr.GetLength(1); j++) { arr[i, j] = i + j; } }
-
分行给二维数组赋值:
int[, ] arr = new int[2, 3]{ {1, 2, 3}, {4, 5, 6} }; // 可简写为 int[, ] arr = { {1, 2, 3}, {2, 4, 6} }; for (int i = 0; i < arr.GetLength(0); i++) { for (int j = 0; j < arr.GetLength(1); j++) { Console.Write(arr[i, j]); Console.Write("\t"); } Console.WriteLine(); } /* 输出: 1 2 3 4 5 6 */
🍂 使用 GetLength(int dimension)
获取数组指定维度的长度。
2.2.2 交叉数组
交叉数组是元素类型为数组的数组,以二维数组为例,矩形数组每行的列数是一样的,交叉数组则不一样。
// int[][] arrayName = new int[numRows][];
int[][] arr = new int[3][]; // arr 可以看成一个数组,arr 的每一个元素也都是数组
// 分别对 arr 的每个元素赋值,每个元素都是一维数组,初始化方法同上
arr[0] = new int[1];
arr[1] = new int[2];
arr[2] = new int[3];
for (int i = 0; i < arr.Length; i++)
{
for (int j = 0; j < arr[i].Length; j++)
{
Console.Write(arr[i][j]);
Console.Write("\t");
}
Console.WriteLine();
}
/* 输出:
0
0 0
0 0 0
*/
2.2.3 辨析 int[][] 和 int[, ]
-
C# 中
int[][]
是交叉数组,在定义数组时必须指定数组的行数,而不必指定列数。int[, ]
是矩形数组,数组的行数和列数都是固定的,在定义数组是必须指定行数和列数。
-
C++ 中
C++ 没有int[, ]
的形式,也没有交叉数组的定义,C++ 中,int[][]
就是二维数组,在 C++定义并初始化二维数组:int a[2][3] = { {1, 2, 3}, {4, 5, 6} }; int a[2][3] = {1, 2, 3, 4, 5, 6}; // 系统按数组排列的顺序对各元素赋初值 int a[2][3] = { {1}, {4, 5} }; // 只对部分元素初始化 int a[][3] = {1, 2, 3, 4, 5, 6}; // 第一维的长度可以省略,但必须指定第二维的长度,以此系统计算出第一维的长度