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?

War es hilfreich?

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.

Array.Copy-Methode

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.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top