2015-05-07 7 views
7

Ich habe ein Array wie folgt:Wie n-ten Artikel im Array zu z-ten Artikel im Array nehmen?

string[] test = new string[]{"apple", "banana", "tomato", "pineapple", "grapes"}; 

Und jetzt, würde Ich mag die 2., 3. und das 4. Element im Array nehmen und miteinander zu verbinden, die derzeit diesen Code Ich verwende:

string result = ""; 
for(int i = 1; i < 4; i++) 
{ 
    result += test[i] + " "; 
} 

So wäre das Ergebnis banana tomato pineapple und das funktioniert gut.

Und ich würde gerne fragen, ob es einen Standard oder einen besseren Weg gibt, dies zu erreichen?

Antwort

14

Sie können schreiben kurz und bündig wie folgt aus:

string result = string.Join(" ", test.Skip(1).Take(3)); 

Auch hat dies den Bonus von nicht ein Leerzeichen hinzugefügt (was Ihr Code tut).

+0

Ein Wort der Warnung, dass Linq des 'Skip' Methode nicht für indizierte Sammlungen optimiert ist (Arrays, Listen ..). Wenn die Leistung ein Problem darstellt, sollten Sie besser eine benutzerdefinierte Slice/Range-Erweiterungsmethode (ähnlich wie bei Ihrem vorhandenen Code) für Arrays verwenden oder zur Verwendung einer 'List ' und der 'GetRange'-Methode wechseln. Die string.Join-Methode ist immer noch vorzuziehen. –

-1

Ich habe eine einfache Lösung.

string result = ""; 
for(int i = 0; i <= [upper bound] ; i++) 
{ 
    if i >= [n] and i <= [z] then 
    { 
     result += test[i] + " "; 
    } 
} 

Sie können n und z als Bereich eingestellt, wie Sie wollen.

+4

Diese Antwort scheint den Code von OP komplexer zu machen, anstatt ihn zu vereinfachen. Sie müssen nicht das gesamte Array durchlaufen und prüfen, ob Sie jedes Mal in Reichweite sind. Nur eine Schleife von 'n' nach' z' - dann brauchst du kein 'if'. – Blorgbeard

5

Eine weitere Option, die GetRange verwendet, die für diesen sehr natürlich:

var result = String.Join(" ", test.ToList().GetRange(1, 3)); 
+2

Beachten Sie, dass die 'ToList' eine Kopie des Arrays erstellt. Völlig irrelevant mit 5 Elementen, aber gut zu wissen, ob Ihr Array groß sein würde. – Blorgbeard

+1

Ja, wenn Sie ein großes Array haben, sollten Sie vorsichtig mit dieser Lösung sein, wie @Borgbeard zu Recht sagt. – DWright