位置:首頁 > 軟件操作教程 > 編程開發(fā) > C# > 問題詳情

C# 數(shù)組的數(shù)組

提問人:劉團(tuán)圓發(fā)布時(shí)間:2020-12-04

    多維數(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í),其中一些元素有子元素,而一些元素沒有。

繼續(xù)查找其他問題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部