C# 數(shù)組的數(shù)組
多維數(shù)組可稱為矩形數(shù)組,這是因?yàn)槊恳恍械脑貍€(gè)數(shù)都相同。任何一個(gè) x坐標(biāo)都有一個(gè)對應(yīng)0至3的y坐標(biāo)。
也可以使用鋸齒數(shù)組Gagged array),其中每行的元素個(gè)數(shù)可能不同。為此,需要有這樣一個(gè)數(shù)組,其中的每個(gè)元素都是另一個(gè)數(shù)組。也可以有數(shù)組的數(shù)組的數(shù)組,甚至更復(fù)雜的數(shù)組。但是,注意這些數(shù)組都必須有相同的基本類型。
聲明數(shù)組的數(shù)組時(shí),其語法要求在數(shù)組的聲明中指定多個(gè)方括號(hào)對,例如:
int[][] jaggedlntArray;
但初始化這樣的數(shù)組不像初始化多維數(shù)組那樣簡單,例如,不能采用以下聲明方式:
jaggedlntArray = new int[3][4];
即使可以這樣做,也不是很有效,因?yàn)槭褂煤唵蔚亩嗑S數(shù)組可以較為輕松地取得相同的結(jié)果。也不能使用下面的代碼:
jaggedlntArray ={{1,2,3}, {1}, {1,2}};
有兩種方式:可以初始化包含其他數(shù)組的數(shù)組(為清晰起見,稱其為子數(shù)組),然后依次初始化子數(shù)組。
jaggedlntArray = new int[2][];
jaggedlntArray[0] = new int[3];
jaggedlntArray[1] = new int[4];
也可以使用上述字面值賦值的一種改進(jìn)形式:
jaggedlntArray = new int[3][] { new int [] { 1, 2, 3 }, new int[] { 1 },
new int[] { 1, 2 } };
也可以進(jìn)行簡化,把數(shù)組的初始化和聲明放在同一行上,如下所示:
int[][] jaggedlntArray = { new int[] { 1, 2, 3 }, new int[] { 1 },
new int[] { 1,2 } };
可對鋸齒數(shù)組使用foreach循環(huán),但通常需要使用嵌套的foreach循環(huán)才能得到實(shí)際數(shù)據(jù)。例如,假定下述鋸齒數(shù)組包含10個(gè)數(shù)組,每個(gè)數(shù)組又包含一個(gè)整數(shù)數(shù)組,其元素是1?10的約數(shù):
int[][] divisorslTo10 = {new int[] { 1 },
new int[] { 1, 2 },
new int[] { 1, 3 },
new int[] { 1, 2, 4 },
new int[] { 1, 5, },
new int[] { 1, 2, 3, 6 },
new int[] { 1, 7 },
new int[] { 1, 2, 4, 8 },
new int[] { 1, 3, 9 },
new int[] { 1, 2, 5, 10 } };
以下代碼會(huì)失敗:
foreach (int divisor in divisorslTo10)
{
WriteLine(divisor);
}
這是因?yàn)閿?shù)組divisorelTolO包含的是int[]元素而不是int元素。正確的做法是循環(huán)遍歷每個(gè)子數(shù)組和數(shù)組本身:
foreach (int[] divisorsOfInt in divisorslTolO)
{
foreach(int divisor in divisorsOfInt)
{
WriteLine(divisor);
}
}
可以看出,使用鋸齒數(shù)組的語法要復(fù)雜得多!大多數(shù)情況下,使用矩形數(shù)組比較簡單,這是一種比較簡單的存儲(chǔ)方式。但是,有時(shí)必須使用鋸齒數(shù)組,所以知道如何使用它們是沒有壞處的。一個(gè)例子是,使用XML文檔時(shí),其中一些元素有子元素,而一些元素沒有。
點(diǎn)擊加載更多評論>>