Übergeben Sie einen Verweis auf ein Element im C#-Array
Frage
Ich baue ein Array von Strings mit auf
string[] parts = string.spilt(" ");
Und um ein Array mit X Teilen darin zu erhalten, möchte ich eine Kopie des Arrays von Zeichenfolgen erhalten, die beim Element beginnen
parts[x-2]
Gibt es außer dem offensichtlichen Brute-Force-Ansatz (ein neues Array erstellen und Zeichenfolgen einfügen) eine elegantere Möglichkeit, dies in C# zu tun?
Lösung
Wie wäre es mit Array.Copy?
http://msdn.microsoft.com/en-us/library/aa310864(VS.71).aspx
Array.Copy-Methode (Array, Int32, Array, Int32, Int32)
Kopiert einen Bereich von Elementen aus einem Array, beginnend beim angegebenen Quellindex, und fügt sie in ein anderes Array ein, beginnend beim angegebenen Zielindex.Die Länge und die Indizes werden als 32-Bit-Ganzzahlen angegeben.
Andere Tipps
Ich erinnere mich an die Beantwortung dieser Frage und habe gerade etwas über ein neues Objekt erfahren, das möglicherweise eine leistungsstarke Methode bietet, um das zu tun, was Sie wollen.
Schauen Sie mal rein ArraySegment<T>
.Damit können Sie so etwas tun.
string[] parts = myString.spilt(" ");
int idx = parts.Length - 2;
var stringView = new ArraySegment<string>(parts, idx, parts.Length - idx);
List<string> parts = new List<string>(s.Split(" "));
parts.RemoveRange(0, x - 2);
Vorausgesetzt, dass List<string>(string[])
ist so optimiert, dass das vorhandene Array als Sicherungsspeicher verwendet wird, anstatt einen Kopiervorgang durchzuführen. Dies könnte schneller sein als das Durchführen einer Array-Kopie.
Verwenden Array.Copy.Es verfügt über eine Überladung, die das tut, was Sie brauchen:
Array.Copy (Array, Int32, Array, INT32, INT32)
Kopiert eine Reihe von Elementen aus einem Array, das am angegebenen Quellindex beginnt, und setzt sie an ein anderes Array an, das am angegebenen Zielindex beginnt.
Ich vermute so etwas wie:
string[] less = new string[parts.Length - (x - 2)];
Array.Copy(parts, x - 2, less, 0, less.Length);
(ohne der Off-by-1-Bug, von dem ich sicher bin, dass er darin enthalten ist.)