【问题标题】:How to aggregate over many lists in F#如何在 F# 中聚合多个列表
【发布时间】:2013-10-11 22:58:11
【问题描述】:

在 F# 中,有时我有很多列表(输入数据的实际数量不同),我想对所有这些列表进行聚合(为了简化而添加)。所以我想要实现的与 List.map2 或 List.map3 所做的相同,但列表数量更大。

我该如何处理它?我想知道这是否可能与 List.scan 相关?

【问题讨论】:

标签: list f# aggregate


【解决方案1】:

您可以使用List.reduce 并执行以下操作:

> let lists = [[1;2;3]; [1;2;3]; [1;2;3]]
val lists : int list list = (...)

> lists |> List.reduce (List.map2 (+));;
val it : int list = [3; 6; 9]

这是做什么的?

  • List.reduce 获取一个值列表(这里的值为int list),并使用说明如何合并两个值的函数将它们聚合为单个值。所以在这种情况下,我们需要给它一个函数int list -> int list -> int list,它会在第一个和第二个列表上调用它,然后在结果和第三个列表上调用它(依此类推)。

  • 参数List.map2 (+) 是一个正确类型的函数——它接受两个列表并执行两个列表的成对求和。这实际上只是编写如下内容的捷径:

    lists |> List.reduce (fun list1 list2 -> 
      List.map2 (fun a b -> a + b) list1 list2)
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 1970-01-01
    相关资源
    最近更新 更多