2015-05-07 64 views
7

我創建了一個這樣的數組:如何將數組中的第n個項目添加到數組中的第z個項目?

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

而現在,我想借數組中的第2,第3和第4項和聯合起來,我目前使用此代碼:

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

所以結果將是banana tomato pineapple,這工作正常。

我想問問是否有標準或更好的方法來實現這一目標?

回答

14

你可以更簡潔地寫這樣的:

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

此外,這具有不添加尾隨空間(代碼那樣)的獎金。

+0

警告說,LINQ的'Skip'方法不爲有序集合優化字(數組,list ..)。如果性能是一個問題,最好使用數組的自定義Slice/Range擴展方法(類似於現有的代碼)或切換到使用'List '和'GetRange'方法。 string.Join方法仍然是可取的。 –

-1

我有一個簡單的解決方案。

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

,只要你想你可以設置nz的範圍。

+4

這個答案似乎增加了OP代碼的複雜性,而不是簡化。你不需要遍歷整個數組,並檢查每次你是否在範圍內;只是從'n'循環到'z' - 然後你不需要'if'。 – Blorgbeard

5

另一種選擇,它採用GetRange,這是本很自然:

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

請注意'ToList'創建數組的副本。與5個項目完全無關,但很高興知道你的陣列是否會變得很大。 – Blorgbeard

+1

是的,如果你有一個大陣列,你應該小心這個解決方案,正如@Blorgbeard所說的。 – DWright