2011-03-22 2 views

ответ

4

Эта функциональность существует в элементе списка. Массивы являются фиксированными элементами ширины в C#, поэтому вы не можете изменять размер без создания нового массива. Однако списки - это совсем другая история. Вы можете сделать:

List<int> sample = oldList.AddRange(someOtherList); 
// sample contains oldList with all elements of someOtherList appended to it. 

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

.ToList() 
.ToArray() 

. Если вы хотите сделать это с неопределенным количеством массивов, вы могли бы сделать что-то вроде этого:

public static class ArrayExtensions 
{ 
    public static T[] MergeArrays<T>(this T[] sourceArray, params T[][] additionalArrays) 
    { 
      List<int> elements = sourceArray.ToList(); 

      if(additionalArrays != null) 
      { 
       foreach(var array in additionalArrays) 
        elements.AddRange(array.ToList()); 
      } 

      return elements.ToArray(); 
    } 
} 

И позвоните:

int[] mergedArray = initialArray.MergeArrays(array1, array2, array3 /* etc */); 
4

Вы можете использовать LINQ Concat() method:

using System.Linq; 

// ... 

var arr1 = new[] { 1, 2, 3 }; 
var arr2 = new[] { 4, 5, 6 }; 

var merged = arr1.Concat(arr2); // This returns an IEnumerable<int> 

// If you want an actual array, you can use: 
var mergedArray = merged.ToArray(); 
+0

Union is set operation. Это больше, чем просто добавление источников. 'new [] {1,2,3} .Union (new [] {2,3,4})' дает "1,2,3,4" вместо ожидаемого "1,2,3,2, 3,4" . Кроме того, он не гарантирует порядок. –

+0

Я не голосовал, но Union использует оператор равенства для создания одного набора из результатов двух массивов. array_merge при работе с числовыми массивами будет включать в себя добавление всех результатов, включая дубликаты без проверки на равенство. – Gilles

+0

@Martinho: Ой, спасибо за это. Я изменю свой ответ на использование 'Concat()' – Cameron

0

Дублировать. Уже обсуждалось здесь:

Most efficient way to append arrays in C#?

Вы не можете объединять массивы Массивы имеют фиксированный размер в C#. Существует множество способов сделать это с помощью перечислений и списка.

+0

php merge не добавляет, он сливается. – user310291

0

Нет непосредственно не эквивалентны array_merge.

Если вы просто хотите, чтобы объединить два массива Существует уже другой вопрос: Merging two arrays in .NET

Если вы ищете для прямой замены массива слияния там нет.

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