366 Stimmen

Wie kann ich zwei Arrays in C# verketten?

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 }));

Zurzeit verwende ich

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

Gibt es eine einfachere oder effizientere Methode?

0voto

drowa Punkte 634
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;
    }
}

Ich denke, die obige Lösung ist allgemeiner und leichter als die anderen, die ich hier gesehen habe. Sie ist allgemeiner, weil sie die Verkettung nicht auf nur zwei Arrays beschränkt und leichter ist, weil sie weder LINQ noch List verwendet.

Beachten Sie, dass die Lösung prägnant ist und die zusätzliche Allgemeinheit keinen signifikanten Laufzeit-Overhead mit sich bringt.

-3voto

presty prajna Punkte 311
int[] scores = { 100, 90, 90, 80, 75, 60 };
int[] alice = { 50, 65, 77, 90, 102 };
int[] scoreBoard = new int[scores.Length + alice.Length];

int j = 0;
for (int i=0;i<(scores.Length+alice.Length);i++)  // to combine two arrays
{
    if(i<scores.Length)
    {
        scoreBoard[i] = scores[i];
    }
    else
    {
        scoreBoard[i] = alice[j];
        j = j + 1;

    }
}

for (int l = 0; l < (scores.Length + alice.Length); l++)
{
    Console.WriteLine(scoreBoard[l]);
}

-3voto

Neil Meyer Punkte 375

Ich denke, dass eine Liste zu diesem Zweck geeignet wäre.

Sie können eine Liste wie diese erstellen.

List<int> Items = new List<int>();  

Dann können Sie ziemlich einfach eine for each-Schleife verwenden, um über eine beliebige Anzahl von Arrays zu iterieren und sie der Liste hinzuzufügen.

foreach (int i in nameOfArray)
{
    Items.Add(i); 
}

Wenn Sie eine Liste verwenden, wird das Problem einer Ausnahme außerhalb der Grenzen beseitigt. Eine Liste kann für die gleiche Funktionalität wie ein Array verwendet werden. Der einzige bedeutsame Unterschied ist das Fehlen einer festen Grenze für die Anzahl der Elemente.

-5voto

Milad Doraki Punkte 43

Var z = x.Concat(y).ToArray();

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X