【问题标题】:Difference between list.map and list.collectlist.map 和 list.collect 的区别
【发布时间】:2013-09-14 11:01:12
【问题描述】:

地图和收集有什么区别?下面的文档 - 我无法区分..


List.map 函数

创建一个新集合,其元素是将给定函数应用于集合的每个元素的结果。

// 签名: List.map : ('T -> 'U) -> 'T 列表 -> 'U 列表


List.collect 函数

对于列表的每个元素,应用给定的函数。连接所有结果并返回组合列表。

【问题讨论】:

    标签: collections f#


    【解决方案1】:

    不同之处在于map 的输出列表与输入列表的长度相同。对于collect,输出列表可能比输入更长或更短,因为您传递的函数返回一个列表而不是单个元素。

    更多细节 - 比较签名。对于map

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

    收集

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

    这里可以看到函数参数的返回类型不同。

    【讨论】:

    【解决方案2】:

    举例说明

    假设您有一个列表列表:

    let list = [ [1; 2]; [3; 4]; [5; 6] ]

    还有一个转换函数:

    let trans = fun x -> [for i in x -> i*10]


    List.map trans list 将产生:

    [[10; 20]; [30; 40]; [50; 60]]

    虽然

    List.collect trans list 将产生:

    [10; 20; 30; 40; 50; 60]


    List.collect 将应用转换函数并将Concatenate 结果,而List.map 将仅应用转换函数。

    【讨论】:

      【解决方案3】:

      除了@John 的回答,区别在于Concatenates 这个词。

      基本上,List.collect f xsList.concat (List.map f xs) 相同。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-17
        • 1970-01-01
        • 2013-08-07
        • 2011-10-20
        • 2020-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多