C# 交错数组
介绍
在 C# 中,数组是一种用于存储相同类型元素的集合。通常情况下,我们使用一维或多维数组来存储数据。然而,C# 还提供了一种特殊的数组类型,称为交错数组(Jagged Arrays)。交错数组是数组的数组,也就是说,它的每个元素本身也是一个数组。与多维数组不同,交错数组的每个子数组可以有不同的长度。
备注
交错数组与多维数组的区别在于,多维数组的每一行都有相同的长度,而交错数组的每一行可以有不同的长度。
定义与初始化
定义交错数组
交错数组的定义方式与普通数组类似,但需要在类型后面加上两个方括号 [][]
。例如:
csharp
int[][] jaggedArray;
初始化交错数组
交错数组的初始化需要分两步进行:
- 初始化外层数组(即数组的数组)。
- 初始化每个子数组。
以下是一个初始化交错数组的示例:
csharp
int[][] jaggedArray = new int[3][];
jaggedArray[0] = new int[] { 1, 2, 3 };
jaggedArray[1] = new int[] { 4, 5 };
jaggedArray[2] = new int[] { 6, 7, 8, 9 };
在这个例子中,jaggedArray
是一个包含 3 个子数组的交错数组。第一个子数组有 3 个元素,第二个子数组有 2 个元素,第三个子数组有 4 个元素。
访问交错数组的元素
访问交错数组的元素与访问普通数组的元素类似。你需要使用两个索引:第一个索引用于访问外层数组中的子数组,第二个索引用于访问子数组中的元素。
csharp
int element = jaggedArray[1][0]; // 访问第二个子数组的第一个元素
Console.WriteLine(element); // 输出: 4
遍历交错数组
遍历交错数组通常需要使用嵌套的 for
循环。外层循环用于遍历外层数组,内层循环用于遍历每个子数组。
csharp
for (int i = 0; i < jaggedArray.Length; i++)
{
for (int j = 0; j < jaggedArray[i].Length; j++)
{
Console.Write(jaggedArray[i][j] + " ");
}
Console.WriteLine();
}
输出结果为:
1 2 3
4 5
6 7 8 9
实际应用场景
交错数组在某些场景下非常有用,特别是当数据的结构不规则时。以下是一些常见的应用场景:
- 存储不规则数据:例如,存储一个班级中每个学生的成绩,每个学生的科目数量可能不同。
- 节省内存:当数据的每一行长度差异较大时,使用交错数组可以避免多维数组中不必要的内存浪费。
- 动态数据结构:交错数组可以用于实现动态数据结构,如稀疏矩阵。
示例:存储学生成绩
假设我们有一个班级,每个学生的科目数量不同。我们可以使用交错数组来存储每个学生的成绩:
csharp
int[][] studentScores = new int[3][];
studentScores[0] = new int[] { 85, 90, 78 };
studentScores[1] = new int[] { 92, 88 };
studentScores[2] = new int[] { 76, 89, 91, 82 };
for (int i = 0; i < studentScores.Length; i++)
{
Console.Write($"学生 {i + 1} 的成绩: ");
for (int j = 0; j < studentScores[i].Length; j++)
{
Console.Write(studentScores[i][j] + " ");
}
Console.WriteLine();
}
输出结果为:
学生 1 的成绩: 85 90 78
学生 2 的成绩: 92 88
学生 3 的成绩: 76 89 91 82
总结
交错数组是 C# 中一种灵活的数据结构,特别适用于存储不规则的数据。与多维数组相比,交错数组的每一行可以有不同的长度,这使得它在某些场景下更加高效和实用。
通过本文,你已经了解了如何定义、初始化、访问和遍历交错数组,并掌握了其在实际应用中的使用场景。
附加资源与练习
- 练习:尝试创建一个交错数组,用于存储一个公司中每个部门的员工姓名。每个部门的员工数量可能不同。
- 进一步学习:了解 C# 中的其他集合类型,如
List<T>
和Dictionary<TKey, TValue>
,并比较它们与交错数组的优缺点。
提示
交错数组是 C# 中一个强大的工具,掌握它将帮助你更好地处理复杂的数据结构。