在C#的开发过程中,多维数组常被用来存储表格、矩阵等结构化数据,访问其中的元素是数组操作的核心需求。和一位数组不同,多维数组的元素访问需要同时指定多个维度的索引值,才能准确定位到目标元素。

C#多维数组的基础定义
C#中多维数组分为矩形数组和交错数组两种类型,其中矩形数组是最常用的多维数组形式,定义时需要指定每个维度的长度。比如定义一个二维矩形数组的语法如下:
// 定义一个2行3列的二维整数数组 int[,] twoDArray = new int[2, 3]; // 初始化数组元素 twoDArray[0, 0] = 1; twoDArray[0, 1] = 2; twoDArray[0, 2] = 3; twoDArray[1, 0] = 4; twoDArray[1, 1] = 5; twoDArray[1, 2] = 6;
如果是三维数组,定义时需要在方括号中增加维度的标识,比如int[,,] threeDArray = new int[2,3,4]就表示定义了一个2*3*4的三维数组。
矩形多维数组的元素访问规则
访问矩形多维数组的元素时,需要在方括号中按顺序传入每个维度对应的索引,索引之间用英文逗号分隔,所有维度的索引都是从0开始计数的。访问二维数组元素的语法为数组名[行索引, 列索引],三维数组则为数组名[维度1索引, 维度2索引, 维度3索引]。
以下是访问二维数组元素的完整示例:
using System;
class Program
{
static void Main()
{
// 定义并初始化二维数组
int[,] scores = new int[3, 2]
{
{90, 85},
{88, 92},
{76, 89}
};
// 访问第一行第二列的元素,输出85
Console.WriteLine(scores[0, 1]);
// 访问第三行第一列的元素,输出76
Console.WriteLine(scores[2, 0]);
// 遍历二维数组的所有元素
for (int i = 0; i < scores.GetLength(0); i++)
{
for (int j = 0; j < scores.GetLength(1); j++)
{
Console.Write(scores[i, j] + " ");
}
Console.WriteLine();
}
}
}
这里用到了GetLength(int dimension)方法,该方法可以获取指定维度的长度,参数0表示第一个维度,1表示第二个维度,这样可以避免硬编码长度值,提升代码的灵活性。
交错数组的元素访问方式
交错数组是数组的数组,每个维度的长度可以不同,定义和访问方式和矩形数组有区别。交错数组的定义语法为type[][] 数组名 = new type[外层长度][];,访问元素时需要先指定外层索引,再指定内层索引。
以下是交错数组的元素访问示例:
using System;
class Program
{
static void Main()
{
// 定义交错数组,外层有3个元素
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};
// 访问第一个内层数组的第三个元素,输出3
Console.WriteLine(jaggedArray[0][2]);
// 访问第二个内层数组的第一个元素,输出4
Console.WriteLine(jaggedArray[1][0]);
// 遍历交错数组的所有元素
for (int i = 0; i < jaggedArray.Length; i++)
{
for (int j = 0; j < jaggedArray[i].Length; j++)
{
Console.Write(jaggedArray[i][j] + " ");
}
Console.WriteLine();
}
}
}
访问多维数组的注意事项
- 索引不能超出范围,比如二维数组有2行,那么行索引只能是0或1,使用2作为行索引会抛出
IndexOutOfRangeException异常。 - 矩形数组的索引数量必须和数组的维度数量一致,二维数组不能只传一个索引,否则会编译报错。
- 交错数组访问时,需要先确保外层索引对应的内层数组已经被初始化,否则会出现空引用异常。
- 可以通过
Array.Rank属性获取数组的维度数量,方便在通用代码中处理不同维度的数组。
常见问题解答
问:多维数组的索引可以是负数吗?
不可以,C#中数组的索引都是从0开始的非负整数,使用负数索引会直接抛出索引越界异常。
问:如何快速获取多维数组所有元素的总和?
可以使用嵌套循环遍历所有维度的元素,累加求和,示例代码如下:
int[,] nums = new int[2, 3] { {1,2,3}, {4,5,6} };
int sum = 0;
for (int i = 0; i < nums.GetLength(0); i++)
{
for (int j = 0; j < nums.GetLength(1); j++)
{
sum += nums[i, j];
}
}
Console.WriteLine(sum); // 输出21