Collections list.map和list.collect之间的差异
地图和收集有什么区别?下面的文档-我看不出有什么区别Collections list.map和list.collect之间的差异,collections,f#,Collections,F#,地图和收集有什么区别?下面的文档-我看不出有什么区别 List.map函数 创建一个新集合,其元素是将给定函数应用于集合的每个元素的结果 //签名: List.map:('T->'U)->'T List->'U List List.collect函数 对于列表的每个元素,应用给定的函数。连接所有结果并返回组合列表。不同之处在于map的输出列表与输入列表的长度相同。对于collect,由于传递的函数返回的是列表而不是单个元素,因此输出列表可能比输入列表长或短 有关更多详细信息,请比较签名。对于
List.map函数 创建一个新集合,其元素是将给定函数应用于集合的每个元素的结果 //签名: List.map:('T->'U)->'T List->'U List
List.collect函数
对于列表的每个元素,应用给定的函数。连接所有结果并返回组合列表。不同之处在于
map
的输出列表与输入列表的长度相同。对于collect
,由于传递的函数返回的是列表而不是单个元素,因此输出列表可能比输入列表长或短
有关更多详细信息,请比较签名。对于map
List.map : ('T -> 'U) -> 'T list -> 'U list
收集
List.collect : ('T -> 'U list) -> 'T list -> 'U list
您可以在这里看到函数参数的返回类型是不同的。除了@John的答案之外,不同之处在于单词
连接
基本上,List.collect f xs
与List.concat(List.map f xs)
示例相同
假设您有一个列表:
let list=[[1;2];[3;4];[5;6]]
和一个转换函数:
let trans=fun x->[对于x中的i->i*10]
List.map trans List
将生成:
[[10;20];[30;40];[50;60]]
当
List.collect trans List
将生成:
[10;20;30;40;50;60]
List.collect
将应用转换函数,并将连接
结果,而List.map
将仅应用转换函数 List.collect
也称为flatMap
(在其他语言中)。裁判