数组
交错数组
前言
在 C# 中,锯齿数组(Jagged Array)是一种特殊的数组结构,与多维数组不同,锯齿数组中的每个元素也是一个数组,但这些内部数组的大小可以不同。锯齿数组常用于表示不规则矩阵或者需要存储不同大小数组的场景。
作用
锯齿数组提供了一种灵活的方式来处理不同长度的数据集合。它允许在同一个数组中存储长度各不相同的数组,因此在需要存储不规则结构数据的场景下非常有用。锯齿数组在内存分配上比多维数组更为灵活,适合用于需要动态调整数组长度的情况。
使用场景
- 数据结构的不规则表示:当数据具有不规则的行列长度时,锯齿数组可以轻松适应,例如:表示不同长度的学生成绩列表或不同年份的销售数据。
- 稀疏矩阵存储:当矩阵的某些行或列没有相同数量的数据时,锯齿数组可以有效减少不必要的内存占用。
- 动态数据表示:对于动态生成的数据集,锯齿数组允许根据实际需求动态设置每个子数组的大小。
示例
声明锯齿数组
在 C# 中,声明一个锯齿数组的语法如下:
dataType[][] jaggedArray = new dataType[rows][];
其中 dataType
是数组中元素的类型,rows
表示锯齿数组的行数。每一行可以有不同长度的子数组。例如:
int[][] jaggedArray = new int[2][];
这里,jaggedArray
是一个包含两行的锯齿数组。
初始化锯齿数组
可以为每个子数组单独设置大小:
// 设置第一个子数组的大小为3
jaggedArray[0] = new int[3];
// 设置第二个子数组的大小为2
jaggedArray[1] = new int[2];
初始化数组时,也可以直接为每个子数组赋值:
jaggedArray[0] = new int[] {1, 3, 5};
jaggedArray[1] = new int[] {2, 4};
或者在声明时初始化:
int[][] jaggedArray = {
new int[] {10, 20, 30},
new int[] {11, 22},
new int[] {88, 99}
};
访问和修改锯齿数组中的元素
可以通过索引来访问锯齿数组中的元素:
Console.WriteLine(jaggedArray[1][0]); // 输出: 2
Console.WriteLine(jaggedArray[0][1]); // 输出: 3
同样,也可以通过索引修改锯齿数组中的元素:
jaggedArray[1][0] = 42;
Console.WriteLine(jaggedArray[1][0]); // 输出: 42
遍历锯齿数组
通过嵌套循环遍历锯齿数组中的元素:
for (int i = 0; i < jaggedArray.Length; i++) {
for (int j = 0; j < jaggedArray[i].Length; j++) {
Console.Write(jaggedArray[i][j] + " ");
}
Console.WriteLine();
}
这段代码将输出锯齿数组的所有元素,每行输出一个子数组的元素。
示例代码
下面是一个完整的示例,展示了如何声明、初始化并遍历锯齿数组:
using System;
namespace JaggedArray {
class Program {
static void Main(string[] args) {
// 声明并初始化锯齿数组
int[][] jaggedArray = {
new int[] {1, 3, 5},
new int[] {2, 4}
};
// 打印锯齿数组的元素
Console.WriteLine("jaggedArray[1][0]: " + jaggedArray[1][0]); // 输出: 2
Console.WriteLine("jaggedArray[1][1]: " + jaggedArray[1][1]); // 输出: 4
Console.WriteLine("jaggedArray[0][2]: " + jaggedArray[0][2]); // 输出: 5
}
}
}
多维数组与锯齿数组结合
在 C# 中,还可以将多维数组作为锯齿数组的元素。例如:
int[][][,] jaggedArray = new int[2][][,] {
new int[][,] { new int[,] { {1, 2}, {3, 4} } },
new int[][,] { new int[,] { {5, 6}, {7, 8} }, new int[,] { {9, 10} } }
};
这种组合形式允许创建更加复杂的数据结构。
结语
锯齿数组为我们提供了处理不规则数据集合的灵活方式,允许每个子数组的大小不同。在需要处理不同维度或不规则数据结构的场景中,锯齿数组能够提供高效且灵活的解决方案。无论是遍历数组,还是存储动态大小的数据,锯齿数组都能够显著提高程序的灵活性。