我正在阅读一些关于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);
答案 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
变量中