跳转到内容

C Sharp 多维数组

来自代码酷


简介[编辑 | 编辑源代码]

多维数组是C#中用于存储表格状数据的重要数据结构,它允许开发者以多个维度(如行和列)组织数据。与一维数组不同,多维数组可以表示更复杂的数据结构,例如矩阵、棋盘或三维空间坐标。

在C#中,多维数组分为两种:

  • 矩形数组(Rectangular Array):所有维度的长度固定且统一(如2x3矩阵)。
  • 交错数组(Jagged Array):每个维度的长度可以不同(如锯齿状数组)。

本文重点介绍矩形多维数组的声明、初始化和操作。

声明与初始化[编辑 | 编辑源代码]

多维数组的声明需指定维度数量和每维的长度。以下是语法示例:

  
// 声明一个2x3的二维数组  
int[,] matrix = new int[2, 3];  

// 声明并初始化一个2x2的二维数组  
string[,] chessboard = new string[2, 2] { {"A1", "A2"}, {"B1", "B2"} };  

// 简化初始化(编译器推断维度)  
double[,] temperatures = { { 25.5, 26.0 }, { 23.8, 24.2 } };

三维数组示例[编辑 | 编辑源代码]

  
// 声明一个2x2x2的三维数组  
int[,,] cube = new int[2, 2, 2] {  
    { {1, 2}, {3, 4} },  
    { {5, 6}, {7, 8} }  
};

访问元素[编辑 | 编辑源代码]

通过索引访问多维数组的元素,索引从0开始:

  
int[,] matrix = { {1, 2, 3}, {4, 5, 6} };  
Console.WriteLine(matrix[0, 1]); // 输出: 2  
matrix[1, 2] = 10; // 修改元素

遍历多维数组[编辑 | 编辑源代码]

使用嵌套循环遍历多维数组:

  
int[,] grid = { {1, 2}, {3, 4}, {5, 6} };  
for (int i = 0; i < grid.GetLength(0); i++) {  
    for (int j = 0; j < grid.GetLength(1); j++) {  
        Console.Write(grid[i, j] + " ");  
    }  
    Console.WriteLine();  
}  
/* 输出:  
1 2  
3 4  
5 6  
*/

使用 `foreach`[编辑 | 编辑源代码]

  
foreach (int num in cube) {  
    Console.Write(num + " "); // 输出: 1 2 3 4 5 6 7 8  
}

实际应用案例[编辑 | 编辑源代码]

案例1:矩阵乘法[编辑 | 编辑源代码]

  
int[,] MultiplyMatrices(int[,] a, int[,] b) {  
    int rowsA = a.GetLength(0);  
    int colsA = a.GetLength(1);  
    int colsB = b.GetLength(1);  
    int[,] result = new int[rowsA, colsB];  

    for (int i = 0; i < rowsA; i++) {  
        for (int j = 0; j < colsB; j++) {  
            for (int k = 0; k < colsA; k++) {  
                result[i, j] += a[i, k] * b[k, j];  
            }  
        }  
    }  
    return result;  
}  

// 使用示例  
int[,] a = { {1, 2}, {3, 4} };  
int[,] b = { {5, 6}, {7, 8} };  
var product = MultiplyMatrices(a, b);

案例2:游戏地图[编辑 | 编辑源代码]

用二维数组表示游戏地图(0=空地,1=障碍物):

  
int[,] map = {  
    {0, 1, 0, 0},  
    {0, 1, 0, 1},  
    {0, 0, 0, 1}  
};

多维数组与内存布局[编辑 | 编辑源代码]

多维数组在内存中是连续存储的。以二维数组为例,元素按行优先顺序排列:

flowchart LR A[0,0] --> B[0,1] --> C[0,2] --> D[1,0] --> E[1,1] --> F[1,2]

数学上,元素位置可通过公式计算: Offset=i×cols+j

常见问题[编辑 | 编辑源代码]

1. 如何获取数组维度?[编辑 | 编辑源代码]

使用 `Rank` 属性获取维度数量,`GetLength(dimension)` 获取具体维度长度:

  
int[,,] arr = new int[2, 3, 4];  
Console.WriteLine(arr.Rank); // 输出: 3  
Console.WriteLine(arr.GetLength(1)); // 输出: 3(第二维长度)

2. 多维数组与交错数组的区别?[编辑 | 编辑源代码]

  • 多维数组是单一对象,所有维度长度固定。
  • 交错数组是“数组的数组”,每行长度可不同。

总结[编辑 | 编辑源代码]

多维数组是C#中处理表格数据的高效工具,适用于数学计算、游戏开发等场景。关键点包括:

  • 使用逗号分隔维度(如 `int[,]`)。
  • 通过嵌套循环遍历元素。
  • 注意内存布局对性能的影响。

模板:Stub