![C# 从入门到项目实践(超值版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/707/27111707/b_27111707.jpg)
6.4 特殊数组
在二维数组中数据一般都是按矩形排列,而有一种多维数组中的数据是按不规则的矩形排列。
6.4.1 多维数组
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-P125_18469.jpg?sign=1738848258-g2NHtlVD4DwaRpZSqDmKmRO0REKisIF1-0-4b837d3da51ba761b20e1e73f3f0e320)
在C#中声明多维数组,需要在方括号中加上逗号。数组在初始化时应指定每一维度的大小。
1. 声明
例如,声明创建一个4行2列的二维数组:
int[,] a = new int[4, 2]; //声明一个4行2列的二维数组a
另外,再声明创建一个三维数组:
int[,,] a = new int[2, 2, 2]; //声明一个2行2列2纵深的三维数组a
2. 初始化
(1)可以在声明数组时将其初始化。
例如:
int[,,] a1 = new int[,,] { { { 1, 2, 3 } }, { { 4, 5, 6 } } }; int[,,] a2 = new int[2, 2, 2] { { { 1, 2 }, { 3, 4 } }, { { 5, 6 }, { 7, 8 } } };
(2)也可以初始化数组但不指定级别。
例如:
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T125_67294.jpg?sign=1738848258-0zyVnuu0RuSBYtrh66soVdcajab6FLbd-0-4735ea8bae91b5c8b99c3fd867ddd71d)
(3)如果选择声明一个数组变量但不将其初始化,必须使用new运算符将一个数组分配给此变量。
例如:
int[,,] a4; a4 = new int[,,] {{{1,2},{3,4}},{{5,6},{7,8}},{{9,10},{11,12}}}; //合法 a4 = {{{1,2},{3,4}},{{5,6},{7,8}},{{9,10},{11,12}}}; //不合法
(4)也可以给多维数组的单个元素进行初始化。
例如:
a4[0,1,1] = 25;
【例6-6】编写程序,使用for语句遍历一个三维数组。
① 在Visual Studio 2017中,新建名称为“Project6”的文件。
② 在代码编辑区域输入以下代码。
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T126_672981.jpg?sign=1738848258-yjqK1m7fQZoPLt75IeO8Q2vIiNsRWcCp-0-6e4c996012fb020c8a00176c933ef73f)
【程序分析】本例演示了三维数组的输出。在代码中,首先声明一个三维数组a,并使用new关键字为其分配空间,接着将其初始化为2行2列3纵深的三维数组,然后再定义三个循环变量i,j,k,最后使用三层嵌套的for循环遍历出数组a中的元素。
在Visual Studio 2017中的运行结果如图6-8所示。
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-P126_18676.jpg?sign=1738848258-J3pGhGKSrpIQrSp1sbwx8xMx7treVypC-0-1dc73e333f1ed49c31dc9df039c0a0df)
图6-8 三维数组
6.4.2 交错数组
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-P126_18687.jpg?sign=1738848258-U9yCt9AcXVD7dIOeBVKU3dnU3JyYjk0W-0-b2af16c50a825aca187406a1fef4ccea)
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-P126_18684.jpg?sign=1738848258-O4zEwNuNw0DGqjWPYA6fXpqZl4y82Xo1-0-99c942cf3ded0de449f986e5b5ddb17e)
图6-9 交错数组
交错数组也称锯齿形数组,是一种不规则的二维数组,它与矩形数组(二维数组)最大的差异在于数组中每一行的长度并不相同,可以把它想象成由不同长度的一维数组组合而成的矩形数组,所以交错数组也被称为“数组中的数组”,它比矩形数组更加节省内存空间,当然同时也要在创建和使用时按照其特点进行操作。
创建交错数组所使用的语法不同于前面的矩形数组,必须使用两个“[]”运算符,第一个代表行数,如图6-9所示。
(1)如果采用分布声明数组元素方式,元素的个数必须书写,因为交错数组的行是固定的,而每行的列是不固定的,所以在初始化时必须在第一个“[]”中写明行数。
例如:
int[][] jaggedArray = new int[4][];
(2)对交错数组每行进行初始化。
例如:
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T126_67303.jpg?sign=1738848258-BApjrKFNgSdcIz5k5J0pjD59VuiO58GI-0-22e31651ce8b6d545810fc8f41aa105a)
在对每行进行初始化时,可以看出每行都是一个一维数组。
(3)采用索引赋值法,给单个元素赋值。
例如:
jaggedArray[2][0] = 25; jaggedArray[3][1] = 32;
(4)直接给交错数组初始化赋值。
例如:
jaggedArray[0] = new int[] { 1, 3, 5, 32}; jaggedArray[1] = new int[] { 2, 10 }; jaggedArray[2] = new int[] { 8, 7, 25, 6}; jaggedArray[3] = new int[] { 9, 4, 0, 11, 5};
(5)可以在声明数组时将其初始化。
例如:
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T127_67306.jpg?sign=1738848258-gE9zVqTRgxIRYxvKSrPumEk25TC0WyWl-0-f042ace9cece2c767dd9da850e27eef1)
【例6-7】编写程序,遍历出交错数组。
① 在Visual Studio 2017中,新建名称为“Project7”的文件。
② 在代码编辑区域输入以下代码。
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-T127_67307.jpg?sign=1738848258-9dqAl73bW39UN8kCadpymYeM7sqevefF-0-2f79083b58a22b7aa323be265bc73af6)
【程序分析】本例演示了交错数组的遍历。在Main方法中,用户自定义一个不规则的二维数组arr,然后为该数组进行初始化,最后通过foreach循环进行遍历。
在Visual Studio 2017中的运行结果如图6-10所示。
![](https://epubservercos.yuewen.com/938BD7/15477656705638906/epubprivate/OEBPS/Images/Figure-P127_18907.jpg?sign=1738848258-0ZQSSw3Z0EJ1oQoUpxh3B63eMXQmGnGJ-0-b16da931fc6437e4715b7a419e81dc35)
图6-10 遍历交错数组