![](/img/trans.png)
[英]Get the name of the lambda expression with the index from the expression's array
[英]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.