讲解C#中多维数组的长度和范围的特性和使用方法
在 C# 中,多维数组是一种可以包含多个维度(通常是二维或三维)的数组类型。理解其长度和范围的特性有助于正确使用和避免错误。以下是多维数组的长度、范围特性及其使用方法的详细讲解。
1. 多维数组的定义和初始化
定义多维数组
在 C# 中,多维数组是通过 [,] 或其他维度符号定义的。例如:
- 二维数组:int[,] matrix = new int[3, 4];
- 三维数组:int[,,] cube = new int[2, 3, 4];
初始化多维数组
多维数组可以在声明时直接初始化:
int[,] matrix = {
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 }
};
2. 多维数组的长度
Length 属性
- 定义:Length 属性表示数组中所有元素的总数。
- 示例:
int[,] matrix = new int[3, 4]; // 3 行 4 列,共 12 个元素
Console.WriteLine(matrix.Length); // 输出: 12
GetLength 方法
- 定义:GetLength(dimension) 返回指定维度的长度。
- 示例:
int[,] matrix = new int[3, 4];
Console.WriteLine(matrix.GetLength(0)); // 输出: 3 (行数)
Console.WriteLine(matrix.GetLength(1)); // 输出: 4 (列数)
3. 多维数组的范围
GetLowerBound 和 GetUpperBound 方法
- 定义:GetLowerBound(dimension):返回指定维度的起始索引。GetUpperBound(dimension):返回指定维度的结束索引。
- 注意:在 C# 中,数组的索引通常从 0 开始。
- 示例:
int[,] matrix = new int[3, 4];
Console.WriteLine(matrix.GetLowerBound(0)); // 输出: 0 (行的起始索引)
Console.WriteLine(matrix.GetUpperBound(0)); // 输出: 2 (行的结束索引)
Console.WriteLine(matrix.GetLowerBound(1)); // 输出: 0 (列的起始索引)
Console.WriteLine(matrix.GetUpperBound(1)); // 输出: 3 (列的结束索引)
4. 多维数组的访问和遍历
访问单个元素
使用逗号分隔的索引访问指定位置的元素:
int[,] matrix = {
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 }
};
Console.WriteLine(matrix[1, 2]); // 输出: 6
遍历多维数组
可以使用嵌套循环遍历所有元素:
int[,] matrix = {
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 }
};
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. 多维数组的特点
- 固定大小:多维数组在声明时确定其大小,无法动态调整。
- 高维支持:C# 支持二维及更高维的数组,但通常使用不超过三维。
- 性能优化:多维数组在内存中是连续存储的,性能比使用嵌套数组(如 int[][])稍高。
6. 实用示例
矩阵转置
将二维数组的行列互换:
int[,] matrix = {
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 }
};
int[,] transposed = new int[matrix.GetLength(1), matrix.GetLength(0)];
for (int i = 0; i < matrix.GetLength(0); i++)
{
for (int j = 0; j < matrix.GetLength(1); j++)
{
transposed[j, i] = matrix[i, j];
}
}
for (int i = 0; i < transposed.GetLength(0); i++)
{
for (int j = 0; j < transposed.GetLength(1); j++)
{
Console.Write(transposed[i, j] + " ");
}
Console.WriteLine();
}
查找最大值
查找二维数组中的最大值:
int[,] matrix = {
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 }
};
int max = int.MinValue;
for (int i = 0; i < matrix.GetLength(0); i++)
{
for (int j = 0; j < matrix.GetLength(1); j++)
{
if (matrix[i, j] > max)
{
max = matrix[i, j];
}
}
}
Console.WriteLine("最大值: " + max); // 输出: 最大值: 9
7. 多维数组与其他语言的比较
特性 | C# | Python | Java |
起始索引 | 0 | 0 | 0 |
多维数组声明 | 固定维度,int[,] | 嵌套列表实现 | 固定维度,int[][] |
内存布局 | 连续内存 | 非连续(列表) | 引用(非连续) |
边界检查 | 自动 | 自动 | 自动 |
总结
多维数组是 C# 提供的强大工具,适用于处理矩阵、图形数据等场景。理解其长度和范围的特性,有助于编写高效、安全的代码。在实际应用中,需要权衡多维数组的使用与动态结构(如 List<List<int>>)的灵活性,选择适合特定需求的方式。