gpt4 book ai didi

Scala groupby key sum value over a Seq of (key, value) 同时保持顺序

转载 作者:行者123 更新时间:2023-12-04 17:14:32 25 4
gpt4 key购买 nike

我正在尝试解决对 Scala 元组进行分组和求和并维护键顺序的问题。

说,

val arrayTuples = Array((A, 38) , (B, 150), (B, 250), (B, 890), (D, 600), (C, 515))


Map(A -> 38, B -> 1290, D -> 600, C -> 515)

正在做:
val aMap = arrayTuples .groupBy(_._1)

似乎乱序。帮助表示赞赏。

编辑:保持第一次遇到的排序。

最佳答案

您可以使用 ListMap保留顺序,但如果您希望遇到的从左到右的顺序,如评论中所要求的,则需要一些额外的步骤。

//note the new order of elements
val arrayTuples =
Array(('A', 38), ('B', 150), ('D', 600), ('B', 250), ('C', 515), ('B', 890))

import collection.immutable.ListMap

arrayTuples.foldRight(ListMap[Char,Int]()) {
case ((c,n), lm) => lm.updated(c , lm.getOrElse(c, 0)+n)
}.foldRight(ListMap[Char,Int]()){case (elem,lm) => lm+elem}
//res0: ListMap[Char,Int] = ListMap(A -> 38, B -> 1290, D -> 600, C -> 515)

因为 ListMap保留 last-enountered 的顺序,在这种情况下将移动 B入门到最后,我决定 foldRight ,移动 A进入到最后,然后 foldRight再次扭转整个事情。

关于Scala groupby key sum value over a Seq of (key, value) 同时保持顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55844632/

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