使用Lambda Expression操作数组索引

时间:2016-02-19 23:10:38

标签: c# asp.net .net linq lambda

我正在阅读一些关于LINQ的教程,我碰到了以下代码,我无法理解' n'虽然我理解作者正试图获得每一个第三元素。但是很清楚地表明我缺乏对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, 253210.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);

3 个答案:

答案 0 :(得分:1)

使用Where将基本循环遍历数组并返回满足给定条件的元素。

n 表示元素本身, index 表示每次迭代时元素索引 即可。

所以where语句逐个遍历数组的每个元素,每次测试该元素的索引是否可以被3整除。

msdn Lambda article是一个很好的开始,可以更好地了解Lambdas。

答案 1 :(得分:0)

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

这一行创建了一个n和index的lambda表达式。 n表示double的值,index表示数组ExchangedPrices中该double的索引。您可以像使用索引一样在lambda表达式中使用n。

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

这一行可以获得数组中可被3整除的所有值,而不是数组中每个第3个元素的索引值。

答案 2 :(得分:0)

此处n代表ExchangedPrices数组中的每个项目。 index是变量,它保存序列的(从零开始)索引值,并使用它来检查if条件index%3==0。因此,当代码运行时,将对迭代中的每个项目再次评估此条件,并返回true或false。 LINQ Where子句接受此谓词,并最终根据此if条件的结果返回原始数据的子集。因此,如果谓词表达式返回true,则将使用相应的项(该迭代的n的值)来构建将返回的子集数据。

由于if条件表达式在评估循环中的37个项目时将返回true 12次,它将从原始数组中获取这12个项目并存储到yenQuery变量中