Как объединить два массива в C #? - PullRequest
228 голосов
/ 10 октября 2009
int[] x = new int [] { 1, 2, 3};
int[] y = new int [] { 4, 5 };

int[] z = // your answer here...

Debug.Assert(z.SequenceEqual(new int[] { 1, 2, 3, 4, 5 }));

-

Прямо сейчас я использую

int[] z = x.Concat(y).ToArray();

Есть ли более простой или более эффективный метод?

Ответы [ 22 ]

0 голосов
/ 22 октября 2014

Для меньших массивов <10000 элементов: </p>

using System.Linq;

int firstArray = {5,4,2};
int secondArray = {3,2,1};

int[] result = firstArray.ToList().Concat(secondArray.ToList()).toArray();
0 голосов
/ 10 мая 2014
static class Extensions
{
    public static T[] Concat<T>(this T[] array1, params T[] array2) => ConcatArray(array1, array2);

    public static T[] ConcatArray<T>(params T[][] arrays)
    {
        int l, i;

        for (l = i = 0; i < arrays.Length; l += arrays[i].Length, i++);

        var a = new T[l];

        for (l = i = 0; i < arrays.Length; l += arrays[i].Length, i++)
            arrays[i].CopyTo(a, l);

        return a;
    }
}

Я думаю, что вышеупомянутое решение является более общим и более легким, чем другие, которые я видел здесь. Он носит более общий характер, поскольку не ограничивает объединение только для двух массивов, и легче, поскольку не использует ни LINQ, ни List.

Обратите внимание, что решение является кратким, и добавленная универсальность не добавляет значительных накладных расходов во время выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...