2016-02-19 103 views
0

我正在瀏覽一些關於LINQ的教程,我碰到以下代碼,我不明白'n'在這裏做什麼,儘管我理解作者正試圖獲得每第三個元素。表明我對Lambda表達式缺乏瞭解(如果有人能夠爲初學者提供掌握鏈接,那麼現在當我試圖找到它們時,我從來沒有發現它們具有堅實的基礎知識,並且結果是理解不清)。在下面的數組中,每第三個元素都是「日元」(貨幣)。使用Lambda表達式操縱數組索引

static double[] ExchangedPrices = {827.70, 604.50, 111869.70, 
             1869.00, 1,365.00, 252609.00, 
             521.36, 380.77, 70465.88, 
             455.68, 332.80, 61588.48, 
             2018.34, 1474.07, 272793.66, 
             920.26, 672.10, 124379.86, 
             1873.45, 1368.25,.45, 
             149.34, 109.07, 20184.66, 
             455.68, 332.80, 61588.48, 
             525.28, 383.63, 70995.16, 
             9.08, 6.63, 1226.96, 
             311.50, 227.50, 42101.50}; 

IEnumerable<double> yenQuery = ExchangedPrices.Where((n, index) => index%3 == 0); 

回答

0

這裏n代表您的ExchangedPrices數組中的每個項目。 index是可變的,它保存序列的(基於零的)索引值,並使用我們正在檢查條件index%3==0。因此,當代碼運行時,這個條件將在迭代中對每個項目進行評估,並返回true或false。 LINQ Where子句使用此謂詞,並最終根據此if條件的結果返回原始數據的子集。因此,如果謂詞表達式返回true,則將使用相應項目(該迭代處的值爲n)來構建將要返回的子集數據。

由於if條件表達式將返回true 12次,同時評估循環中的37個項目,它將從您的原始數組中獲得這12個項目,並將存儲到您的yenQuery變量。

0
ExchangedPrices.Where((n, index) => index%3 == 0); 

這條線被創建n和指數的一個lambda表達式。 n表示double的值,index表示數組ExchangedPrices中double的索引。您可以像使用索引一樣在lambda表達式中使用n。

ExchangedPrices.Where((n, index) => n%3 == 0); 

此行會得到你所有的陣列中是被3整除,通過索引數組中不是每3個元素的值。

1

使用Where將基本上遍歷數組並返回滿足給定條件的元素。

Ñ表示元件本身和索引表示元素的在每次迭代索引

所以where語句由3

msdn Lambda article經歷各自爲陣逐一和元素每次測試,如果該元素的索引是整除是一個良好的開端,以便更好地對Lambdas的理解。