在元组列表(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 中,可以使用 groupBymapValues 来完成:

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)中将所有具有相同日期的双精度加起来的主要内容,如果未能解决你的问题,请参考以下文章

如何在元组列表中找到所有最小元素?

Scala 元组

在元组列表中查找元素

检查元组是不是出现在元组列表中时出现ValueError

在元组列表中查找索引位置

Python:在元组列表和嵌套列表中比较并查找匹配项