合并.NET中的两个数组
时间:2020-03-05 18:52:17 来源:igfitidea点击:
.NET 2.0中是否有内置函数将两个数组合并为一个数组?
数组都是相同的类型。我是从代码库中广泛使用的函数中获取这些数组的,无法修改该函数以其他格式返回数据。
我希望避免编写自己的函数来完成此操作(如果可能)。
解决方案
回答
我认为我们可以为此使用Array.Copy。它需要一个源索引和一个目标索引,因此我们应该能够将一个数组添加到另一个数组上。如果我们需要的不只是将一个添加到另一个上而变得更加复杂,那么这可能不是适合工具。
回答
假设目标数组有足够的空间,则Array.Copy()将起作用。我们也可以尝试使用List <T>和它的.AddRange()方法。
回答
我假设我们使用的是自己的数组类型,而不是内置的.NET数组:
public string[] merge(input1, input2) { string[] output = new string[input1.length + input2.length]; for(int i = 0; i < output.length; i++) { if (i >= input1.length) output[i] = input2[i-input1.length]; else output[i] = input1[i]; } return output; }
另一种方法是使用内置的ArrayList类。
public ArrayList merge(input1, input2) { Arraylist output = new ArrayList(); foreach(string val in input1) output.add(val); foreach(string val in input2) output.add(val); return output; }
这两个例子都是C#。
回答
如果可以操纵数组之一,则可以在执行复制之前调整其大小:
T[] array1 = getOneArray(); T[] array2 = getAnotherArray(); int array1OriginalLength = array1.Length; Array.Resize<T>(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上可用数组方法的更多信息。
回答
首先,请确保我们问自己一个问题:"我真的应该在这里使用数组吗?"
除非我们要构建对速度至关重要的东西,否则可能会采用" List <int>"之类的类型化List。通过网络发送内容时,我唯一一次使用数组是用于字节数组。除此之外,我从未碰过它们。
回答
在C3.0中,可以使用LINQ的Concat方法轻松完成此操作:
int[] front = { 1, 2, 3, 4 }; int[] back = { 5, 6, 7, 8 }; int[] combined = front.Concat(back).ToArray();
在C2.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
版本。