在元组列表(SCALA)中将所有具有相同日期的双精度加起来
Posted
技术标签:
【中文标题】在元组列表(SCALA)中将所有具有相同日期的双精度加起来【英文标题】:sum all double with same date in List of Tuples (SCALA) 【发布时间】:2021-12-06 04:42:50 【问题描述】:我有以下列表:
val bought = List(("ta",5.5,"1/09/21"),("ta",50.5,"2/09/20"),("xa",60.38,"1/09/21"),...)
我想在 Scala 中实现一个函数,它返回一个元组列表,类型为 List[(String,Double)],将日期设为 String,将当天花费的金额设为 Double。
我的想法是获取日期集
val x = bought.map(_._3).toSet
如果每个元组的日期相同,然后使用一个理解结构来求和每个元组的值,但是我的尝试是徒劳的。
拜托,它应该是类似 scala 的,而不是命令式的。
有什么提示吗?
【问题讨论】:
bought.groupMapReduce(_._3)(_._2)(_+_).toList
(Scala 2.13.x)
【参考方案1】:
我认为解决问题的“Scala”方法是:
从您的列表中创建一个 Map,其中键是日期,值是所购买物品的列表 把每一天的钱都加起来在 Scala 中,可以使用 groupBy
和 mapValues
来完成:
bought.groupBy(_._3)
.view
.mapValues(values => values.map(_._2).sum)
.toList
【讨论】:
.mapValues()
自 2.13.0 起已被弃用。
view.mapValues() 那么呢?
Ops,是的,我认为 view.mapValues() 应该是正确的。 @jwvh 你怎么看?
Scaladocs 确实推荐相当笨拙的.view.mapValues(...).toMap
替代方案。我更喜欢直接的方法:.mapcase(k,v) => (k,...)
。如果您不想使用groupMapReduce()
解决方案,那么其中任何一个都可以工作。以上是关于在元组列表(SCALA)中将所有具有相同日期的双精度加起来的主要内容,如果未能解决你的问题,请参考以下文章