2014-10-29 12 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

+0

Вы можете, конечно, но вам нужно будет ввести значение массива ввода-вывода в цикле. –

1

Если вы хотите сделать это без цикл, как Selman22 предложил, ваш другой вариант будет использовать массив с зазубринами или массив массивов. Это делается так:

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

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

Доступ к ним возможен с помощью двух кронштейнов, например. jaggedArray [I] [J].

Обратите внимание, что такие понятия, как Length, работают по-разному для зубчатых массивов по сравнению с многомерными массивами. Я рекомендую смотреть по документации MSDN здесь: http://msdn.microsoft.com/en-us/library/2s05feca.aspx

Если вы хотите использовать List вместо (как вы, вероятно, должны - Список лучше почти во всех случаях использования в .NET), вы можете использовать List < < List T >>, к которому можно обращаться так же, как и к зубчатому массиву.

+0

Зачем использовать List? Если нет необходимости добавлять новые элементы - Список не обязательно - он содержит массив под обложкой. –

+0

Поскольку списки имеют гораздо больше функций и очень мало производительности. Умнее мужчин, чем я говорю здесь: http://stackoverflow.com/questions/434761/array-versus-listt-when-to-use-which – furkle

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]); 
    } 
}