您将如何使用LINQ编写此映射过滤器链



下面的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();

最新更新