C Sharp 交错数组
外观
C#交错数组(Jagged Array)是一种特殊的数组结构,它由多个一维数组组成,每个一维数组可以有不同的长度。与多维数组(如矩形数组)不同,交错数组的每一行可以独立定义大小,因此更灵活,适用于存储不规则的数据结构。
介绍[编辑 | 编辑源代码]
在C#中,交错数组是“数组的数组”,即一个数组的每个元素本身又是一个数组。这种结构允许每一行(或维度)拥有不同的长度,从而节省内存空间并提高效率。交错数组常用于处理非均匀数据,例如存储不同长度的字符串列表或表格数据。
与多维数组的区别[编辑 | 编辑源代码]
- 多维数组(矩形数组):所有行具有相同的列数,例如
int[,] matrix = new int[3, 4];
表示3行4列的固定结构。 - 交错数组:每一行可以有不同的长度,例如
int[][] jagged = new int[3][];
表示3行,但每行的列数可以动态分配。
声明与初始化[编辑 | 编辑源代码]
交错数组的声明和初始化分为两步: 1. 声明外层数组(行数)。 2. 为每一行分配独立的一维数组(列数)。
语法示例[编辑 | 编辑源代码]
// 声明一个交错数组(3行)
int[][] jaggedArray = new int[3][];
// 初始化每一行的列数
jaggedArray[0] = new int[] { 1, 2, 3 }; // 第0行有3列
jaggedArray[1] = new int[] { 4, 5 }; // 第1行有2列
jaggedArray[2] = new int[] { 6, 7, 8, 9 }; // 第2行有4列
可视化结构[编辑 | 编辑源代码]
访问元素[编辑 | 编辑源代码]
通过双重索引访问元素,例如 jaggedArray[行][列]
:
Console.WriteLine(jaggedArray[0][1]); // 输出: 2
Console.WriteLine(jaggedArray[2][3]); // 输出: 9
遍历交错数组[编辑 | 编辑源代码]
使用嵌套循环遍历所有元素:
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
实际应用案例[编辑 | 编辑源代码]
案例1:存储学生成绩[编辑 | 编辑源代码]
假设不同学生参加的考试科目数量不同,使用交错数组存储成绩:
string[][] studentScores = new string[2][];
studentScores[0] = new string[] { "Alice", "Math:90", "Science:85" };
studentScores[1] = new string[] { "Bob", "Math:75", "History:88", "Art:92" };
foreach (var student in studentScores)
{
Console.WriteLine($"Student: {student[0]}");
for (int i = 1; i < student.Length; i++)
{
Console.WriteLine($" - {student[i]}");
}
}
案例2:图像处理中的像素块[编辑 | 编辑源代码]
在图像处理中,不同区域的像素块大小可能不同:
byte[][] imageBlocks = new byte[3][];
imageBlocks[0] = new byte[] { 255, 0, 0 }; // 红色块
imageBlocks[1] = new byte[] { 0, 255, 0, 0 }; // 绿色块(带透明度)
imageBlocks[2] = new byte[] { 0, 0, 255 }; // 蓝色块
高级用法[编辑 | 编辑源代码]
动态调整行长度[编辑 | 编辑源代码]
可以随时为某一行重新分配数组:
jaggedArray[1] = new int[] { 10, 20, 30, 40, 50 }; // 修改第1行
结合LINQ查询[编辑 | 编辑源代码]
使用LINQ过滤或转换数据:
var evenNumbers = jaggedArray.SelectMany(row => row.Where(n => n % 2 == 0));
// 输出所有偶数: 2, 4, 6, 8
性能与内存考虑[编辑 | 编辑源代码]
- 优点:节省内存(仅分配实际需要的空间)。
- 缺点:访问速度略慢于多维数组(需多次解引用)。
总结[编辑 | 编辑源代码]
交错数组是C#中处理不规则数据的强大工具,尤其适合动态变化的场景。初学者应掌握其声明、初始化和遍历方法,而高级用户可结合LINQ或动态分配优化应用逻辑。