Administrator
发布于 2025-09-24 / 22 阅读
0
0

C#6.2 二维数组

一、二维数组的样子

{
    {1, 2, 3, 4},
    {5, 6, 7, 8},
    {9, 10, 11, 12}
}
{
    {1, 2},
    {3, 4, 5},
    {6},
    {7, 8, 9, 10}
}

二、二维数组是什么

定义:二维数组就是 “数组的数组”,即:以数组作为元素的数组。

用途:二维数组可以用来表示具有行和列二维结构的数据集合。

三、二维数组的分类

规则数组(矩形数组)

{
    {1, 2, 3, 4},
    {5, 6, 7, 8},
    {9, 10, 11, 12}
}

特点:

  1. 每行的元素数量相同。(可以看作是一个标准的矩阵)

  2. 内存中是一个连续的块。

不规则数组(锯齿数组)

{
    {1, 2},
    {3, 4, 5},
    {6},
    {7, 8, 9, 10}
}

特点:

  1. 数组每行的元素数量可以不同。(因此它是一个数组的数组)

  2. 内存中是一个数组的数组,每行的长度可以不同。

四、声明二维数组的语法

语法(矩形数组)

//语法1
数据类型[,] 数组名 = new 数据类型[行数, 列数];  // 3行4列的规则二维数组
//语法2
数据类型[,] 数组名 = new 数据类型[,] {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};
//语法3
数据类型[,] 数组名 = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};

示例

int[,] matrix = new int[3, 4];  // 3行4列的规则二维数组

示例

int[,] matrix = new int[3, 4]
{
    { 1, 2, 3, 4 },
    { 5, 6, 7, 8 },
    { 9, 10, 11, 12 }
};

语法(锯齿数组)

数据类型[][] 数组名 = new 数据类型[行数][];

//方法2:声明锯齿数组(只声明第一维)
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};

//方法2
int[][] jaggedArray = new int[][] {
    new int[] {1, 2, 3},
    new int[] {4, 5},
    new int[] {6, 7, 8, 9}
};

//方法3
// 使用简化语法
int[][] jaggedArray = {
    new int[] {1, 2, 3},
    new int[] {4, 5},
    new int[] {6, 7, 8, 9}
};

string[][] names = {
    new string[] {"张三", "李四"},
    new string[] {"王五"},
    new string[] {"赵六", "钱七", "孙八"}
};

示例

int[][] jaggedArray = new int[3][];

示例

int[][] jaggedArray = new int[3][]
{
    new int[] { 1, 2, 3 },    // 第0行有3个元素
    new int[] { 4, 5 },       // 第1行有2个元素
    new int[] { 6, 7, 8, 9 }  // 第2行有4个元素
};

访问数组元素

读操作(矩形数组)

Console.WriteLine(matrix[0, 1]);  // 输出 2,第0行第1列的元素
Console.WriteLine(matrix[2, 3]);  // 输出 12,第2行第3列的元素

写操作(矩形数组)

// 赋值
scores{0, 0} = 85; // 第一个学生的第一门成绩
scores{0, 1} = 90; // 第一个学生的第二门成绩
scores{1, 0} = 78; // 第二个学生的第一门成绩

读操作(锯齿数组)

Console.WriteLine(jaggedArray[0][1]);  // 输出 2,第0行第1列的元素
Console.WriteLine(jaggedArray[2][3]);  // 输出 9,第2行第3列的元素

遍历二维数组

遍历矩形数组

int{,} numbers = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};
​
// 获取维度
int rows = numbers.GetLength(0); // 行数
int cols = numbers.GetLength(1); // 列数
​
// 使用嵌套循环遍历
for (int i = 0; i < rows; i++)
{
    for (int j = 0; j < cols; j++)
    {
        Console.Write(numbers{i, j} + " ");
    }
    Console.WriteLine(); // 换行
}

遍历锯齿数组

 // 外层循环遍历每个子数组
for (int i = 0; i < arr.Count; i++)
{
    // 内层循环遍历当前子数组中的每个元素
    for (int j = 0; j < arr[i].Count; j++)
    {
        Console.WriteLine(arr[i][j]);
    }
}

课堂练习

学生成绩表

// 创建3个学生,每个学生有3门课的成绩表
int{,} gradeBook = {
    {85, 92, 78},
    {76, 88, 95},
    {90, 87, 82}
};

// 计算每个学生的平均分
for (int student = 0; student < gradeBook.GetLength(0); student++)
{
    int sum = 0;
    for (int subject = 0; subject < gradeBook.GetLength(1); subject++)
    {
        sum += gradeBook{student, subject};
    }
    double average = (double)sum / gradeBook.GetLength(1);
    Console.WriteLine($"学生{student + 1}的平均分: {average:F2}");
}


评论