2010-05-17 18 views
6

Was ist der einfachste Weg, um das Ende eines Arrays in C# - dh. alles außer dem ersten Element.Holen Sie sich das Ende eines Arrays

+1

Es gibt mehrere Interpretationen Ihrer Frage: Haben Sie eine Kopie des Arrays wollen Elemente? Möchten Sie über das ursprüngliche Array iterieren und das erste überspringen? –

Antwort

13
var myArray = GetSomeArray(); 
myArray = myArray.Skip(1).ToArray(); 

Bitte beachte, dass ich vermeiden würde .ToArray() so weit wie möglich anrufen und halte IEnumerable<T> stattdessen in .net zu verwenden.

+3

Aber ... wenn Sie ToArray wie oben genannt aufrufen, ist es wahrscheinlich viel effizienter Array.Copy zu verwenden, da ich nicht glaube, dass ToArray genug über seine Eingabe weiß, um das Array auf Länge 1 zu initialisieren. – Josh

+1

@Josh: Das ist wahr (ich nehme an, 'ToArray' würde funktionieren, indem man intern eine' List' aufbaut und 'ToArray' auf * dem *) nennt, aber es wäre besser,' ToArray' überhaupt nicht aufzurufen, wenn Sie musste nicht. –

6

Array.Copy:

var array1 = new int[] { 1, 2, 3, 4, 5, 6 }; 

var array2 = new int[array1.Length - 1]; 
Array.Copy(array1, 1, array2, 0, array2.Length); 

// array2 now contains {2, 3, 4, 5, 6} 

bearbeiten: Joel Coehoorn Antwort ist besser, weil es bedeutet, können Sie Arrays vermeiden zusammen mit!

1

Lol rufen Sie mich alte Schule, aber hey es ist gültig!

for(int i = 1; i<array.length;i++) 
{ 
    array2[i-1]=array[i]; 
} 

: P

oder man konnte sie nachgeben, wenn sie in einem Verfahren waren und Sie müssen nur sie nennen, es hängt nur ab, was Sie mit dem Schwanz tun wollen.

0

Ich bevorzuge die Antwort von Codeka, da es sehr einfach ist und wahrscheinlich die effizienteste Art, Dinge zu tun. Wie Sie jedoch sehen können, ist es nicht so einfach zu implementieren, wenn Sie es benötigen.

Ich habe etwas sehr ähnliches, als eine Erweiterungsmethode, so dass Sie SubArray aufrufen können, und es wird sich wie Substring in einer Zeichenfolge verhalten.

Etwas wie:

public static T[] SubArray<T>(this T[] array, int startIndex, int length) 
{ 
    // various null, empty, out of range checks here 

    T[] returnArray = new T[length]; 
    Array.Copy(array, startIndex, returnArray, 0, length); 
    return returnArray; 
} 

var array1 = new[] { 1, 2, 3, 4, 5 }; 
var arrays2 = array1.SubArray(2, 3); 

Sie könnten ein paar andere Überlastungen implementieren, wie zum Beispiel:

public static T[] SubArray<T>(this T[] array, int startIndex) 
{ 
    // null check here 

    return SubArray(array, startIndex, array.Length - startIndex); 
} 
-1
using System.Linq; 

var array = new [] { 1, 2, 3, 4 }; 
var tail = array.Reverse().Take (array.Length - 1).Reverse(); 
Verwandte Themen