Это довольно простой вопрос, но я не нашел ответа:
Есть ли какая-либо операция Seq / List в F #, соответствующая LINQ SelectMany?
- Я знаю, что могу использовать System.Linq в F #, если я
хочу.
- Я знаю, что могу сделать рекурсивный метод
и использовать выражения вычисления F #
(и делать еще более сильные вещи).
Но если я попытаюсь доказать, что операции со списком F # более мощные, чем LINQ ...
- .Where = List.filter
- .Select = List.map
- .Aggregate = List.fold
- ...
В C # 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