C#二维数组的声明和使用(非常详细,附带实例)
C# 中的二维数组(two dimensional array)就是一维数组的扩充,如果我们将一维数组想象成一维空间,则二维数组就是二维空间,也就是平面。
如果我们将相同类型的数据组织起来形成 2×3 的二维数组,则可以将数据想象成下图:
当数据排成二维数组后,我们未来可以建立 [row][column] 索引值,通常 column 可以缩写为 col,所以又可以写成是 [row][col],也可以想成是 [行][列] 索引值,用来存取此二维数组特定位置的内容。
二维数组的使用和其他的变量一样,使用前一定要先声明,以便编译程序能预留空间供程序使用,二维数组声明的语法如下:
例如,声明整数的 2×3 二维数组:
例如,假设有一个考试成绩如下所示:
请声明上述考试成绩的初始值:
程序设计时也可以看到有人使用下列方式设定二维数组的初始值:
【实例】列出学生各次考试成绩的应用:
foreach 既可以遍历一维数组,也可以用来遍历二维数组。
例如,foreach 遍历二维数组:
例如,我想设计一个图案“洪”,则我们可用下列方式设计:
二维数组或多维数组常用于处理计算机图像。有一个位图图像如下所示,是 12×12 点阵,代表英文字母 H。
上述每一个方格称像素,每个图像的像素点都由 0 或 1 组成,如果像素点是 0 则表示此像素是黑色,如果像素点是 1 则表示此像素点是白色。在上述概念下,我们可以用下图来表示计算机存储此英文字母的方式。
因为每一个像素都由 0 或 1 组成,所以称上图为位图表示法,虽然很简单,但其缺点是无法很精确地表示整个图像。因此又有了所谓的灰度图像的概念,详情可以参考下图。
上图虽然也是黑白图像,但是在黑色与白色之间多了许多灰色,因此整个图像相较于位图细腻许多。在计算机科学中使用 0~255 代表灰色的等级,其中 0 代表纯黑色,255 代表纯白色。这 256 个灰度级刚好可以使用 8 个位(Bit)表示,相当于是一个字节(Byte),下列是十进制数值与灰度表。
若是使用上述灰度表,则可以使用一个二维数组代表一个图像,我们将这类图像称为灰度图像。
C#二维数组的声明
假设有 6 笔散乱的数据,如下所示:
如果我们将相同类型的数据组织起来形成 2×3 的二维数组,则可以将数据想象成下图:

当数据排成二维数组后,我们未来可以建立 [row][column] 索引值,通常 column 可以缩写为 col,所以又可以写成是 [row][col],也可以想成是 [行][列] 索引值,用来存取此二维数组特定位置的内容。
二维数组的使用和其他的变量一样,使用前一定要先声明,以便编译程序能预留空间供程序使用,二维数组声明的语法如下:
数据类型[ , ] 变量名称 = new 数据类型[行数][列数];上述语句中等式右边的数据类型右边有连续的两个中括号,这代表该数组是二维数组,中括号内分别是二维数组行(row)的元素个数和列(column)的元素个数。
例如,声明整数的 2×3 二维数组:
int[ ] sc = new int[2][3];
C#二维数组的初始化
C# 语言允许声明二维数组时直接设定二维数组的初始值,设定二维数组初始值的语法如下:数据类型 [ ] 变量名称 = { [ 第 1 列的初始值 ], [ 第 2 列的初始值 ], ... [ 第 n 列的初始值 ] };
例如,假设有一个考试成绩如下所示:
学生座号 | 第 1 次考试 | 第 2 次考试 | 第 次考试 |
---|---|---|---|
1 | 90 | 80 | 95 |
2 | 95 | 90 | 85 |
请声明上述考试成绩的初始值:
Int[ , ] sc = {{90, 80, 95}, {95, 90, 85}};
程序设计时也可以看到有人使用下列方式设定二维数组的初始值:
Int[ , ] sc = {{90, 80, 95}, {95, 90, 85}}; // 不鼓励,会比较不清楚
【实例】列出学生各次考试成绩的应用:
int[,] sc = {{ 90, 80, 95}, { 95, 90, 85}}; for (int i = 0; i < 2; i++) for (int j = 0; j < 3; j++) Console.WriteLine($"学生{i+1}的第{j+1}次考试成绩是 {sc[i,j]}");执行结果为:
学生1的第1次考试成绩是 90
学生1的第2次考试成绩是 80
学生1的第3次考试成绩是 95
学生2的第1次考试成绩是 95
学生2的第2次考试成绩是 90
学生2的第3次考试成绩是 85
C#二维数组与匿名数组
匿名数组也可以用二维数组的方式来表示,可以参考以下内容:var c = new[] { new[]{1,2,3,4}, new[]{5,6,7,8} }; for (int i = 0; i < c.Length; i++) { for (int j = 0; j < c[i].Length; j++) Console.Write($"{c[i][j]}\t"); Console.WriteLine(); }执行结果为:
1 2 3 4
5 6 7 8
C# foreach遍历二维数组
C# 语言提供一个循环关键词 foreach,可以方便我们遍历数组,这个关键词特别适合我们不知道数组元素的个数时,可以用此方法迭代数组元素内容,此语法如下:foreach (数据类型 变量 in 数组)变量的数据类型需与数组元素相同,关键词 foreach 主要是用变量迭代所有的数组元素,在迭代过程也可以使用 break 中断此迭代。
foreach 既可以遍历一维数组,也可以用来遍历二维数组。
例如,foreach 遍历二维数组:
int[,] num = new int[,] {{ 6, 66 }, { 2, 22 }, { 5, 55 }}; foreach (int n in num) Console.Write($"{n} ");执行结果为:
6 66 2 22 5 55
C#二维数组的实际应用
声明二维数组的目的有很多,特别是当你设计电玩程序时,若想设计大型字体或图案,就可以利用设定二维数组初始值的方式,来设计此字体或图案。例如,我想设计一个图案“洪”,则我们可用下列方式设计:
int[,] num = { { 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0 }, { 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0 }, { 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0 }, { 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0 }, { 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0 }, { 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0 }, { 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1 } }; for (int i = 0; i < 9; i++) { for (int j = 0; j < 16; j++) if (num[i, j] == 1) Console.Write("*"); else Console.Write(" "); Console.WriteLine(""); }执行结果为:
** ** ** ** ** ** ** *********** ** ** **** ** ** *********** ** ** ** ** ** ** ** ** **
二维数组或多维数组常用于处理计算机图像。有一个位图图像如下所示,是 12×12 点阵,代表英文字母 H。

上述每一个方格称像素,每个图像的像素点都由 0 或 1 组成,如果像素点是 0 则表示此像素是黑色,如果像素点是 1 则表示此像素点是白色。在上述概念下,我们可以用下图来表示计算机存储此英文字母的方式。

因为每一个像素都由 0 或 1 组成,所以称上图为位图表示法,虽然很简单,但其缺点是无法很精确地表示整个图像。因此又有了所谓的灰度图像的概念,详情可以参考下图。

上图虽然也是黑白图像,但是在黑色与白色之间多了许多灰色,因此整个图像相较于位图细腻许多。在计算机科学中使用 0~255 代表灰色的等级,其中 0 代表纯黑色,255 代表纯白色。这 256 个灰度级刚好可以使用 8 个位(Bit)表示,相当于是一个字节(Byte),下列是十进制数值与灰度表。

若是使用上述灰度表,则可以使用一个二维数组代表一个图像,我们将这类图像称为灰度图像。