繁体   English   中英

使用Lambda表达式操作数组的索引

[英]Manipulating array's index using Lambda Expression

我正在阅读有关LINQ的一些教程,碰到了以下代码,尽管我知道Author正在尝试获取所有第三个元素,但我无法理解这里的'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);

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

n代表元素本身, index代表每次迭代时元素的索引

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

msdn Lambda文章是一个更好地了解Lambda的良好开始。

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

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

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

此行将为您提供数组中所有可被3整除的值,而不是按索引对数组中的每个第3个元素进行除数。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM