2011-03-22 78 views

回答

4

此功能存在於List元素中。數組是C#中的固定寬度項目,因此您不能在不創建新數組的情況下修改大小。但是,列表是一個不同的故事。你可以這樣做:

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

此外,與LINQ是十分容易的List和Array之間的轉換與

.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

聯盟是一個集合操作。它不僅僅是追加資源。 'new [] {1,2,3} .Union(new [] {2,3,4})'給出「1,2,3,4」,而不是預期的「1,2,3,2, 3,4" 。此外,它不保證秩序。 – 2011-03-22 18:18:01

+0

我沒有投票,但Union使用等號運算符從兩個數組的結果創建一個單一集合。在處理數值數組時,array_merge將包含附加所有結果,包括重複項而不測試相等性。 – Gilles 2011-03-22 18:20:33

+0

@Martinho:哎呀,謝謝你。我將改變我的答案以使用'Concat()' – Cameron 2011-03-22 18:21:50

0

重複。這裏已經討論:

Most efficient way to append arrays in C#?

爲數組有固定在C#中的大小不能合併數組。有很多方法可以通過枚舉和列表來完成。

+0

php合併不會追加,它會合並。 – user310291 2011-03-23 07:07:34

0

沒有不能直接等同於array_merge。

如果你只是想合併兩個數組已經有另外一個問題:Merging two arrays in .NET

如果您尋找一個直接序列合併更換是沒有的。

相關問題