2014-10-29 170 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]); 
    } 
}