map と collect はどう違いますか?以下のドキュメント - 違いがわかりません..
List.map<'T,'U> 関数
指定された関数をコレクションの各要素に適用した結果を要素とする新しいコレクションを作成します。
// シグネチャ: List.map : ('T -> 'U) -> 'T リスト -> 'U リスト
List.collect<'T,'U> 関数
リストの各要素に対して、指定された関数を適用します。すべての結果を連結し、結合されたリストを返します。
map と collect はどう違いますか?以下のドキュメント - 違いがわかりません..
List.map<'T,'U> 関数
指定された関数をコレクションの各要素に適用した結果を要素とする新しいコレクションを作成します。
// シグネチャ: List.map : ('T -> 'U) -> 'T リスト -> 'U リスト
List.collect<'T,'U> 関数
リストの各要素に対して、指定された関数を適用します。すべての結果を連結し、結合されたリストを返します。
違いは、からの出力リストがmap
入力リストと同じ長さであることです。の場合、渡す関数が単一の要素ではなくリストを返すためcollect
、出力リストは入力よりも長くても短くてもかまいません。
詳細については、署名を比較してください。為にmap
List.map : ('T -> 'U) -> 'T list -> 'U list
集めて
List.collect : ('T -> 'U list) -> 'T list -> 'U list
ここで、関数の引数の戻り値の型が異なることがわかります。
@ジョンの答えに加えて、違いは単語にありConcatenates
ます。
基本的にList.collect f xs
は と同じList.concat (List.map f xs)
です。