【问题标题】:is there a function equivalent of php array_merge in c#c# 中是否有等效于 php array_merge 的函数
【发布时间】:2011-07-20 17:34:49
【问题描述】:

如果不是最好的方法是什么?

注意:合并不仅仅是追加,它融合了相同的键。

【问题讨论】:

    标签: c#


    【解决方案1】:

    此功能存在于 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 */);
    

    【讨论】:

      【解决方案2】:

      您可以使用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();
      

      【讨论】:

      • 联合是一个集合操作。它不仅仅是附加源。 new[]{1,2,3}.Union(new[]{2,3,4}) 给出“1,2,3,4”,而不是预期的“1,2,3,2,3,4”。此外,它不保证顺序。
      • 我没有投反对票,但 Union 使用相等运算符从两个数组的结果创建一个集合。处理数值数组时的array_merge 将包括追加所有结果,包括重复项,而不进行相等性测试。
      • @Martinho:糟糕,谢谢。我将更改我的答案以使用Concat()
      • 如果输入数组具有相同的字符串键,则该键的后一个值将覆盖前一个。但是,如果数组包含数字键,则后面的值不会覆盖原始值,而是会被追加。来源:php.net/manual/en/function.array-merge.php
      • @HelloWorld:好的,谢谢。我已将答案更改为使用 Concat;在这种情况下,永远不会有字符串键,因为那将是 C# 中的字典,而不是数组
      【解决方案3】:

      重复。已经在这里讨论过:

      Most efficient way to append arrays in C#?

      您不能合并数组,因为数组在 C# 中具有固定大小。使用枚举和列表有很多方法可以做到这一点。

      【讨论】:

      • php 合并不是追加,而是合并。
      【解决方案4】:

      No 不直接等同于array_merge。

      如果您只想合并两个数组,还有另一个问题:Merging two arrays in .NET

      如果您正在寻找直接的数组合并替换,则没有。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-29
        • 2012-04-01
        • 2023-03-08
        • 2014-08-06
        • 2010-10-30
        • 2011-02-09
        相关资源
        最近更新 更多