F # List SelectMany

Это довольно простой вопрос, но я не нашел ответа:

Есть ли в F # какая-либо операция Seq / List, соответствующая LINQ SelectMany?

  • Я знаю, что можно использовать System.Linq в F #, если я хочу.
  • Я знаю, что могу сделать рекурсивный метод и использовать F # Computing Expressions (и сделать еще более мощные).

Но если я попытаюсь доказать, что операции F # List более мощные, чем 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
30
задан Tuomas Hietanen 5 January 2011 в 00:09
поделиться