gpt4 book ai didi

scala - 如何以更实用的方式累积我的总数?

转载 作者:行者123 更新时间:2023-12-01 07:11:22 25 4
gpt4 key购买 nike

目前我有

val orders = new HashMap[Int, Int]
orders.put(36, 110)
orders.put(35, 90)
orders.put(34, 80)
orders.put(33, 60)

我想继续运行,以便最终映射如下所示
36 -> 110
35 -> 200
34 -> 280
33 -> 340

目前我按如下方式强制执行此操作
val keys = orders.keys.toList.sortBy(x => -x)
val accum = new HashMap[Int, Int]
accum.put(keys.head, orders(keys.head))
for (i <- 1 to keys.length - 1) {
accum.put(keys(i), orders(keys(i)) + accum(keys(i-1)))
}
accum.foreach {
x => println(x._1, x._2)
}

是否有使用映射、折叠等功能更强大的方法?我可以用一个直接的 List 来做,但我不能完全理解如何用 HashMap 来做到这一点

编辑:订购很重要。左列 (36, 35, 34, 33) 需要按降序排列

最佳答案

由于HashMaps是没有排序的,直接做这个没那么简单,所以先转换成有序序列:

val elems = orders.toSeq.sortBy(-_._1)
.scanLeft(0,0)((x, y) => (y._1, x._2 + y._2)).tail

// ArrayBuffer((36,110), (35,200), (34,280), (33,340))

如果您真的想将它们粘贴在具有相反顺序的有序映射中,而不是将它们打印出来,您可以这样做:
val accum = collection.SortedMap(elems: _*)(
new Ordering[Int] { def compare(x: Int, y: Int) = y compare x })

// SortedMap[Int,Int] = Map(36 -> 110, 35 -> 200, 34 -> 280, 33 -> 340)

关于scala - 如何以更实用的方式累积我的总数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8160360/

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