【问题标题】:When to use fold and when to use foreach in list in Scala在 Scala 的列表中何时使用折叠以及何时使用 foreach
【发布时间】:2016-12-01 23:19:50
【问题描述】:

在我的理解中,当列表中的每个元素都需要应用函数时,我们使用折叠函数,对吗?

如果只是迭代列表,foreach就够了吗?

【问题讨论】:

    标签: scala functional-programming


    【解决方案1】:

    fold

    当您希望将集合聚合为单个值时,请使用 fold。这里我们说,从零开始,将每个连续元素添加到前一个元素,然后在集合耗尽后返回结果。

    scala> List(1, 2, 3).foldLeft(0){ (a, b) => a + b }
    res10: Int = 6
    

    请注意,fold 专为并行计算而设计,但 foldLeftfoldRight 在可应用于哪些类型方面更强大。

    map

    当您想将函数应用于集合中的每个元素并返回另一个集合和结果时,请使用 map

    scala> List(1, 2, 3).map(x => x + x)
    res12: List[Int] = List(2, 4, 6)
    

    foreach

    当您不想返回任何东西但需要一些副作用时,请使用foreach。将每个值保存到数据库中。

    List(1, 2, 3).foreach(x => saveToDB(x))
    

    【讨论】:

      【解决方案2】:

      在我的理解中,当列表中的每个元素都需要应用函数时,我们使用折叠函数,对吗?

      不。当您想要获得一个结果是列表中 所有 元素的函数时,您可以使用 fold。也就是你把fold列表变成一个结果

      要对列表的每个元素应用相同的功能,主要是为了打印到屏幕等副作用,您使用foreach,因此得名。

      【讨论】:

        【解决方案3】:

        如果你想减少你正在使用折叠的列表

        List(1,2,3,4).fold(0){_+_} <<-- gives you sum of elements in list
        

        Foreach 用于迭代列表,例如打印所有元素

        List(1,2,3,4).foreach(println)
        

        【讨论】:

        • foreach 通常是错误的方式,map 在大多数情况下是你想要的。
        • @Reactormonk foreach 通常是错误的方式,但我看到使用foreach 编写手册map 的人与使用foreach 编写手册的人一样多@ 987654329@
        • 我也看到了我使用mapforeach 的分享
        猜你喜欢
        • 2014-08-05
        • 2012-06-29
        • 2012-03-31
        • 1970-01-01
        • 2013-06-05
        • 2014-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多