Jest to dość proste pytanie, ale nie mogę znaleźć odpowiedzi:F # Lista SelectMany
Czy istnieje jakakolwiek operacja/Lista seq w F #, aby dopasować LINQ SelectMany?
- Wiem, że mogę użyć System.Linq w F #, jeśli chcę chce.
- Wiem, że mogę wykonać metodę rekursywną i użyć wyrażeń obliczeniowych F # (i zrobić jeszcze mocniejsze rzeczy).
Ale jeśli staram się udowodnić, że operacje # Lista F są mocniejsze niż LINQ ...
- .gdzie = List.filter
- .Wybrać = List.map
- .Aggregate = List.fold
- ...
W składni C# SelectMany użytkowania jest dość prosta:
var flattenedList = from i in items1
from j in items2
select ...
Czy jest jakiś łatwy bezpośredni mecz, List.flatten, List.bind lub coś w tym stylu?
SelectMany ma kilka podpisów, ale najbardziej skomplikowana wydaje się być:
IEnumerable<TResult> SelectMany<TSource, TCollection, TResult>(
this IEnumerable<TSource> source,
Func<TSource, IEnumerable<TCollection>> collectionSelector,
Func<TSource, TCollection, TResult> resultSelector
);
w F # warunkach byłoby to:
('a -> 'b list) -> ('a -> 'b -> 'c) -> 'a list -> 'c list
Jak można pokazać, że lista F # jest silniejsza niż lista C#? Jeśli jest to kwestia, która z nich ma więcej funkcji, to nie jest ona silniejsza, po prostu bardziej rozdęta. Czy próbujesz pokazać, że jest coś, co możesz zrobić w F #, którego nie możesz używać z C#, używając list? –