目录
一、二维数组
1.定义
++矩形结构的数组,所有行长度相同,内存中连续存储。++
2.语法
++type[,] arrayName = new type[rows,columns];++
3.特点
**固定结构:**行列数在初始化时确定,不可动态调整。
**连续内存:**所有元素按行优先顺序存储在连续内存块中。
**性能优化:**访问速度快,适合矩阵运算等场景。
4.使用示例
//初始化一个3行2列的二维数组
int[,] matrix = new int[3,2]{ {1,2} ,{3,4} ,{5,6} };
//访问元素(行索引,列索引)
int value = matrix[1,0]; //结果:3
//遍历二维数组
for(int i = 0; i < matrix.GetLength(0); i++ ) //行
{
for(int j = 0; j < matrix.GetLength(1); j++ ) //列
{
Console.Write(matrix[i ,j] + " ");
}
Console.WriteLine("");
}
5.注意事项
++必须同时指定行数和列数,无法单独调整某一行的长度。++
内存占用固定,即使部分行未使用也会占用全部空间。
二、交错数组
1.定义
++数组的数组,每行长度可不同,内存中分散存储。++
2.语法
++type[][] arrayName = new type[rows][];++
3.特点
动态灵活:每行可独立初始化不同长度,甚至为null。
分散内存:每行作为独立数组存储,仅存储行的引用。
空间高效:适合行长度差异大的场景(如稀疏矩阵)。
4.使用示例
//初始化一个3行的交错数组(行长度可变)
int[][] jaggedArray = new int[3][];
jaggedArray[0] = new int[]{ 1, 2 }; //第1行:2列
jaggedArray[1] = new int[]{ 3, 4, 5 }; //第2行:3列
jaggedArray[2] = new int[]{ 6 }; //第3行:1列
//访问元素(行索引)[列索引]
int value = jaggedArray[1][2]; //结果:5
//遍历交错数组
foreach(int[] row in jaggedArray)
{
if( row != null )
{
Console.Write(element + "");
}
Console.WriteLine("");
}
5.注意事项
++需要先初始化外层数组(行数),再单独初始化每行。++
访问时需要检查行是否为null,避免NullReferenceException.
三、关键对比
|----------|------------------------|-----------------------|
| 对比维度 | 二维数组 | 交错数组 |
| 内存结构 | 连续矩形块 | 分散的数组引用 |
| 行长度 | 固定,所有行长度相同 | 可变,每行可独立设置 |
| 初始化 | 需要同时指定行列数 | 先指定行数,再逐行初始化 |
| 访问性能 | 更快(连续内存,缓存友好) | 稍慢(需要两次指针跳转) |
| 空间效率 | 固定占用rows✖columns空间 | 仅占用实际元素空间(适合稀疏数据) |
四、选择指南
使用场景
- 用二维数组:当数据是规则矩形(如像素矩阵、Excel表格),追求访问速度。
- 用交错数组:当行长度差异大(如日志数据、不规则网格),或需要动态调整行结构。
示例场景
- 二维数组:存储100×100的灰度图像像素。
- 交错数组:存储不同用户的订单记录(每个用户订单数不同)。