2013-10-25 70 views
1

,如果我失去了一些東西簡單,我不知道,我有這方面的工作例如:獲取數的總和滿足給定的條件有一個lambda表達式

int[] x = new int[] {1, 2, 3, 5, 6, 7}; 

    int[] arrayToUse = x.Where(i => i > 4).ToArray<int>(); 
    int sum = arrayToUse.Sum(); 

    Console.WriteLine(sum.ToString()); 

我想知道 - 有什麼辦法來組合這兩個:

int[] arrayToUse = x.Where(i => i > 4).ToArray<int>(); 
int sum = arrayToUse.Sum(); 

爲了得到一個表達式,將返回的總和,對嗎?

+1

可以實際上所有四個組合成一個單一的表達'Console.WriteLine(新INT [] {1,2,3,5,6,7}。凡(I => I> 4).Sum());' – Servy

+0

@Servy,這應該是一個答案 –

+0

@GarryVass從技術上講,他確實指定了這兩個陳述,而不是全部四個。 – Servy

回答

3

剛:

int sum = x.Where(i => i > 4).Sum(); 

如果調用ToArray,將所有的數據複製到一個新的數組對象,但如果你不需要的是,離開它。 Sum適用於任何IEnumerable<int>(以及其他數字類型),不需要在那裏創建中間數組。

無論如何,如果打電話ToArray,你可以離開了<int>一部分,編譯器可以推斷類型參數,int,很容易在這種情況下。

當你做Console.WriteLine時,你不必對整數做ToString; WriteLine有一個過載,需要int(不裝箱),它會自動呼叫ToString

+0

裏德有一個錯字,這是正確的答案。 – lincolnk

2

您可以使用:

int sum = x.Where(i => i > 4).Sum(); 
2

在計算總和之前,不需要將過濾的列表轉換爲中間數組。你可以這樣做:

int[] x = new int[] {1, 2, 3, 5, 6, 7}; 
int sum = x.Where(i => i > 4).Sum(); 
Console.WriteLine(sum); 

現在我不會爲產品代碼推薦這個,因爲它的可讀性,而且它確實沒有提高任何有意義的方式表現,但你可以即使只有一個做到這一點函數調用:

int[] x = new int[] {1, 2, 3, 5, 6, 7}; 
int sum = x.Sum(i => i > 4 ? i : 0); 
Console.WriteLine(sum); 
+0

upvote for alternative answer – lincolnk