2014-12-17 11 views
2

Как добавить массив в другой 2D-массив? НапримерКак добавить данные из массива 1d в 2d в C#

//change this 
array2d = { {1,2,3}, {4,5,6} }; 
//to this 
array2d = { {1,2,3}, {4,5,6}, {7,8,9} }; 
//by adding 
array1d = {7,8,9}; 

Есть ли лучший способ, кроме создать новый массив, который больше, чем старый, а затем скопировать старый массив в массив?

+0

Вы не можете изменять размеры массивов, поэтому ответ отрицательный. – CSharpie

+0

[Изменить размер многомерного массива] (http://stackoverflow.com/questions/6539571/how-to-resize-multidimensional-2d-array-in-c) – MethodMan

+0

Что вы говорите о том, что вы не можете изменять размер и массив. да, вы можете [Array.Resize Example] (http://www.dotnetperls.com/array-resize) – MethodMan

ответ

0

Кажется, что вы можете использовать другую структуру данных, список массивов сделает это намного проще.

2

Я бы порекомендовал List<List<int>> для чего-то подобного, если у вас нет причин не делать этого.

Код может выглядеть примерно так:

List<List<int>> my2dList = new List<List<int>>() 
{ 
    new List<int>() 
    { 
     1, 
     2, 
     3 
    }, 
    new List<int>() 
    { 
     4, 
     5, 
     6 
    }, 
}; 
my2dList.Add(new List<int>(){7,8,9}); 

В качестве альтернативы, если вы действительно хотите, чтобы ограничить каждый столбец длиной три, рассмотрите использование внутренней структуры с неизменным размером (массив размера 3 и т. Д.)

0

Расширенная версия фрагмента кода, размещенная на @VP. включает в себя обратное преобразование из списка (List> в Jagged массив с помощью Linq:

// 2d array to List 
    List<List<int>> ar2list = new List<List<int>>() 
    { 
     new List<int>() { 1, 2, 3 }, 
     new List<int>() { 4, 5, 6 }, 
    }; 

    // adding item to List 
    ar2list.Add(new List<int>() { 7, 8, 9 }); 

    // List to Jagged array conversion using Linq 
    int[][] _arrConcat = ar2list.Select(Enumerable.ToArray).ToArray(); 

Наконец, относящуюся к данной конкретной потребительной случае по просьбе OP, int[][] может быть легко преобразован в int[,] с простым for цикла:

array2d = new int[_arrConcat.Length, 3]; 
for (int i = 0; i<_arrConcat.Length; i++) 
{ 
    for (int j = 0; j < 3; j++) 
    { 
     array2d[i, j] = _arrConcat[i][j]; 
    } 
} 

где array2d это исходный массив с добавлением индекса/контентом.

Надеется, что это поможет. с наилучшими пожеланиями,

Смежные вопросы