请解释 C# 中多维数组与交错数组(锯齿数组)的核心区别,并说明各自声明、初始化以及访问元素的具体写法,最好给出简单示例。
考察说明
考查对 C# 两种数组类型的结构理解与基本使用能力。
回答思路
- 【回答框架 1】多维数组在内存中是连续的矩形矩阵,所有维度大小固定,例如 int[,] matrix = new int[2,3]; 声明后即固定 2 行 3 列,访问元素用 matrix[i,j],初始化可用 new int[,] { {1,2,3}, {4,5,6} }。
- 【回答框架 2】交错数组本质是数组的数组,每个子数组可独立指定长度,例如 int[][] jagged = new int[3][]; 然后分别 jagged[0] = new int[2]; 元素访问用 jagged[i][j],初始化可写为 new int[][] { new int[]{1,2}, new int[]{3,4,5} }。
- 【回答框架 3】多维数组适合矩阵运算、固定网格等长度一致的场景,内存连续更利于性能;交错数组适合每行长度不等的场景,如表达三角矩阵或稀疏数据结构,但子数组之间内存不连续。
- 【回答框架 4】选择依据:数据形状是否规则,若规则选多维数组,规则性差则选交错数组。需要注意 Length 属性:多维数组返回总元素数,而交错数组每行是一个单独数组,用各子数组的 Length 获取行长度。
- 【关键点 1】多维数组成员内存连续,锯齿数组每行是独立数组,总长度不固定。
- 【关键点 2】多维数组声明 int[,],元素访问用 a[i,j];锯齿数组声明 int[][],访问用 a[i][j]。
- 【易错点 1】不要混淆 Length 属性,多维数组返回总元素数,锯齿数组需使用各子数组的 Length。
- 【易错点 2】锯齿数组声明后必须初始化每个子数组,否则访问会抛空引用异常。