2014-10-29 226 views
0

我有三個1D字符串數組A,B和C,每個20個元素。C#:1d陣列到2d陣列

我想建立一個2D [2,19]數組d由這些1D掛毯A,B和C.

我想我可以做這樣的組成:

D[0,]=A; 
D[1,]=B; 
D[2,]=C; 

但VS給我語法錯誤。我怎樣才能不經過迭代呢?

回答

1

您需要通過一個使用循環,並設置每個元素之一:

for(int i = 0; i < 20; i++) 
{ 
    D[0, i] = A[i]; 
    D[1, i] = B[i]; 
    D[2, i] = C[i]; 
} 

D應至少[3,20]持有這些價值觀。

2

多維和鋸齒陣列之間存在差異。你已經使用了多維度,但你正在分配像一個鋸齒狀的數組。

所以:

TElement[] A = // 
TElement[] B = // 
TElement[] C = // 

var D = new TElement[3][]; 
D[0] = A; 
D[1] = B; 
D[2] = C; 

訪問元素:

var elem = D[0][10]; 

更多:http://forums.asp.net/t/1278141.aspx?arrays+multidimensional+versus+jagged

+0

好了,我明白,我不能定義尺寸多維數組尺寸? – user1146081 2014-10-29 20:44:43

+0

你當然可以,但是你需要在循環中重新分配輸入數組值。 – 2014-10-29 20:45:45

1

如果你想爲循環做這沒有一個像Selman22建議,你的其他選擇將是使用鋸齒陣列還是陣列數組。這是這樣完成的:

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

jaggedArray[0] = A[i]; 
jaggedArray[1] = B[i]; 
jaggedArray[2] = C[i]; 

這些可以用兩個括號來訪問,例如, jaggedArray [i] [j]。

請注意像長度這樣的概念對於鋸齒狀陣列的工作方式與多維陣列相比有很大不同。我建議你看MSDN文檔在這裏:http://msdn.microsoft.com/en-us/library/2s05feca.aspx

如果您想使用列表,而不是(因爲你可能應該 - 名單是幾乎所有用例在.NET更好),可以使用目錄<名單<ŧ >>,可以像鋸齒陣列一樣訪問它。

+0

爲什麼要用List?如果沒有必要添加新的元素 - 列表不是必需的 - 它擁有一個封面下的數組。 – 2014-10-29 19:34:39

+0

因爲列表有更多的功能,並且性能下降很少。比我在這裏告訴它更聰明的人:http://stackoverflow.com/questions/434761/array-versus-listt-when-to-use-這 – furkle 2014-10-29 19:35:42

0

做一個數組的數組:

string[] a = new string[3] {"A","B","C"}; 
string[] b = new string[3] { "D", "E", "F" }; 
string[] c = new string[3] { "G", "H", "I" }; 
string[][] d = new string[3][]; 
d[0] = a; 
d[1] = b; 
d[2] = c; 
for (int i = 0; i < d.Length; i++) { 
    for (int j = 0; j < d[i].Length; j++) { 
     MessageBox.Show(d[i][j]); 
    } 
}