9

map と collect はどう違いますか?以下のドキュメント - 違いがわかりません..


List.map<'T,'U> 関数

指定された関数をコレクションの各要素に適用した結果を要素とする新しいコレクションを作成します。

// シグネチャ: List.map : ('T -> 'U) -> 'T リスト -> 'U リスト


List.collect<'T,'U> 関数

リストの各要素に対して、指定された関数を適用します。すべての結果を連結し、結合されたリストを返します。

4

3 に答える 3

12

違いは、からの出力リストがmap入力リストと同じ長さであることです。の場合、渡す関数が単一の要素ではなくリストを返すためcollect、出力リストは入力よりも長くても短くてもかまいません。

詳細については、署名を比較してください。為にmap

List.map : ('T -> 'U) -> 'T list -> 'U list

集めて

List.collect : ('T -> 'U list) -> 'T list -> 'U list

ここで、関数の引数の戻り値の型が異なることがわかります。

于 2013-09-14T11:02:17.907 に答える
11

@ジョンの答えに加えて、違いは単語にありConcatenatesます。

基本的にList.collect f xsは と同じList.concat (List.map f xs)です。

于 2013-09-14T12:40:25.157 に答える