gpt4 book ai didi

scala - 如何对集合元素的字段求和而不先映射它们(如 foldLeft/reduceLeft)?

转载 作者:行者123 更新时间:2023-12-03 21:26:47 25 4
gpt4 key购买 nike

考虑这个类:

 case class Person(val firstName: String, val lastName: String, age: Int)
val persons = Person("Jane", "Doe", 42) :: Person("John", "Doe", 45) ::
Person("Joe", "Doe", 43) :: Person("Doug", "Don", 65) ::
Person("Darius", "Don", 24) :: Person("Dora", "Don", 20) ::
Person("Dane", "Dons", 29) :: Nil

要获得所有人的年龄总和,我可以编写如下代码:
persons.foldLeft(0)(_ + _.age)

但是如果我想使用 sum ,我需要先映射值,代码如下所示:
persons.map(_.age).sum

我如何使用 sum方法而不创建一些中间集合?

(我知道这样的“优化”很可能在不在紧密循环中运行时没有任何真正的性能差异,我也知道惰性 View 等。)

是否有可能有这样的代码
persons.sum(_.age)

做什么 foldLeft/ reduceLeft做?

最佳答案

你回答的是你自己。只需使用 view :

persons.view.map(_.age).sum

通过检查工作流程来说服自己:
persons.view.map { p =>
println("invoking age")
p.age
}.map { x =>
println("modifing age")
x + 0
}.sum

对比:
persons.map { p =>
println("invoking age")
p.age
}.map { x =>
println("modifing age")
x + 0
}.sum

关于scala - 如何对集合元素的字段求和而不先映射它们(如 foldLeft/reduceLeft)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5064383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com