下面的map
-filter
链获取一个数字列表并将其加倍,使用一些谓词p
过滤结果,然后对剩余的结果进行平方:
getNumbers().map(x => x * 2).filter(x => p(x)).map(x => x ** 2)
惯用的Python等价物需要嵌套的列表理解:
[y ** 2 for y in [x * 2 for x in getNumbers()] if p(y)]
您将如何使用LINQ在C#中编写这篇文章?它是否也需要嵌套?
您可以使用LINQ select函数来代替map和Where来代替过滤器
getNumbers().Select(x => x * 2).Where(x => p(x)).Select(x => Math.Pow(x, 2)).ToList();
使用LINQ的另一种方法是使用查询语法。
from x in getNumbers()
select x * 2 into x
where x > p(x)
select Math.Pow(x, 2)
如果我理解正确,你可以用LINQ这样写:
var myNumbers = GetNumbers().Select(x => x * 2).Where(y => p(y)).Select(z => Math.Pow(z, 2)).ToList();