当前位置:  开发笔记 > 编程语言 > 正文

在.NET中合并两个数组

如何解决《在.NET中合并两个数组》经验,为你挑选了8个好方法。

.NET 2.0中是否有内置函数,它将采用两个数组并将它们合并为一个数组?

这些数组都是相同的类型.我从我的代码库中广泛使用的函数中获取这些数组,并且无法修改函数以返回不同格式的数据.

我希望尽可能避免编写自己的功能来实现这一目标.



1> OwenP..:

在C#3.0中,您可以使用LINQ的Concat方法轻松完成此任务:

int[] front = { 1, 2, 3, 4 };
int[] back = { 5, 6, 7, 8 };
int[] combined = front.Concat(back).ToArray();

在C#2.0中,你没有这样的直接方式,但Array.Copy可能是最好的解决方案:

int[] front = { 1, 2, 3, 4 };
int[] back = { 5, 6, 7, 8 };

int[] combined = new int[front.Length + back.Length];
Array.Copy(front, combined, front.Length);
Array.Copy(back, 0, combined, front.Length, back.Length);

这可以很容易地用于实现您自己的版本Concat.



2> Blair Conrad..:

如果您可以操作其中一个阵列,则可以在执行复制之前调整其大小:

T[] array1 = getOneArray();
T[] array2 = getAnotherArray();
int array1OriginalLength = array1.Length;
Array.Resize(ref array1, array1OriginalLength + array2.Length);
Array.Copy(array2, 0, array1, array1OriginalLength, array2.Length);

否则,您可以创建一个新数组

T[] array1 = getOneArray();
T[] array2 = getAnotherArray();
T[] newArray = new T[array1.Length + array2.Length];
Array.Copy(array1, newArray, array1.Length);
Array.Copy(array2, 0, newArray, array1.Length, array2.Length);

有关MSDN上可用的数组方法的更多信息.


请注意,`Array.Resize`实际上并没有调整数组的大小,而是复制它.这就是为什么第一个参数是by-ref(这意味着你的第一个代码可能无法编译).
请注意,Array.Copy的第二个代码示例中的参数顺序是错误的.使用Array.Copy(array1,newArray,0); 代替.
我只是抛弃你的第一段代码.它没有提供优势,并且更难以阅读IMO.

3> 小智..:

使用LINQ:

var arr1 = new[] { 1, 2, 3, 4, 5 };
var arr2 = new[] { 6, 7, 8, 9, 0 };
var arr = arr1.Union(arr2).ToArray();


注意:Union将删除重复项.
因为它将删除重复,它永远不会是一个正确的答案.

4> Smith..:

如果您不想删除重复项,请尝试此操作

使用LINQ:

var arr1 = new[] { 1, 2, 3, 4, 5 };
var arr2 = new[] { 6, 7, 8, 9, 0 };
var arr = arr1.Concat(arr2).ToArray();



5> 小智..:

首先,确保你问自己"我真的应该在这里使用数组"这个问题吗?

除非你正在构建一个速度至关重要的东西,否则一个类型化的列表就好像List是要走的路.我通过网络发送内容时,唯一使用数组的是字节数组.除此之外,我从不接触它们.



6> 小智..:

更容易使用LINQ:

var array = new string[] { "test" }.ToList();
var array1 = new string[] { "test" }.ToList();
array.AddRange(array1);
var result = array.ToArray();

首先将数组转换为列表并合并它们...之后只需将列表转换回数组:)



7> GEOCHET..:

我认为你可以使用Array.Copy.它需要一个源索引和目标索引,因此您应该能够将一个数组附加到另​​一个数组.如果你需要更复杂而不仅仅是将一个附加到另一个,这可能不适合你.



8> Joel Coehoor..:

假设目标阵列有足够的空间,Array.Copy()将起作用.您也可以尝试使用a List及其.AddRange()方法.

推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有