Как бы вы написали эту цепочку фильтров-карт, используя LINQ? - PullRequest
2 голосов
/ 29 апреля 2020

Следующая цепочка map - filter берет список чисел и удваивает их, фильтрует результаты, используя некоторый предикат p, затем возводит в квадрат те, которые остаются:

getNumbers().map(x => x * 2).filter(x => p(x)).map(x => x ** 2)

Идиомати c Python эквивалент требует понимания вложенного списка:

[y ** 2 for y in [x * 2 for x in getNumbers()] if p(y)]

Как бы вы написали это в C#, используя LINQ? Это также требует вложенности?

Ответы [ 2 ]

4 голосов
/ 29 апреля 2020

Вы можете использовать функцию выбора LINQ вместо карты и Где вместо фильтра

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)
2 голосов
/ 29 апреля 2020

Если я вас правильно понимаю, вы написали бы это в LINQ так:

var myNumbers = GetNumbers().Select(x => x * 2).Where(y => p(y)).Select(z => Math.Pow(z, 2)).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...