合并.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版本。