【发布时间】:2011-07-20 17:34:49
【问题描述】:
如果不是最好的方法是什么?
注意:合并不仅仅是追加,它融合了相同的键。
【问题讨论】:
标签: c#
如果不是最好的方法是什么?
注意:合并不仅仅是追加,它融合了相同的键。
【问题讨论】:
标签: c#
此功能存在于 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 */);
【讨论】:
您可以使用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”。此外,它不保证顺序。
Concat()
重复。已经在这里讨论过:
Most efficient way to append arrays in C#?
您不能合并数组,因为数组在 C# 中具有固定大小。使用枚举和列表有很多方法可以做到这一点。
【讨论】:
【讨论】: