Это довольно простой вопрос, но я не нашел ответа:
Есть ли какая-либо операция Seq/List в F # для соответствия LINQ SelectMany?
- Я знаю, что могу использовать System.Linq в F #, если я хочу.
- Я знаю, что могу сделать рекурсивный метод и использовать выражения вычисления F # (и сделать еще более мощные вещи).
Но если я попытаюсь доказать, что операции F # List более мощные, чем LINQ...
- .Where = List.filter
- .Select = List.map
- .Aggregate = List.fold
- ...
В С# SelectMany синтаксис использования довольно прост:
var flattenedList = from i in items1
from j in items2
select ...
Есть ли легкое прямое совпадение, List.flatten, List.bind или что-то в этом роде?
SelectMany имеет пару подписей, но наиболее сложным является:
IEnumerable<TResult> SelectMany<TSource, TCollection, TResult>(
this IEnumerable<TSource> source,
Func<TSource, IEnumerable<TCollection>> collectionSelector,
Func<TSource, TCollection, TResult> resultSelector
);
В терминах F # это будет:
('a -> 'b list) -> ('a -> 'b -> 'c) -> 'a list -> 'c list