gpt4 book ai didi

scala - Scala 集合上的高效分组聚合

转载 作者:行者123 更新时间:2023-12-04 05:19:42 24 4
gpt4 key购买 nike

我经常需要做类似的事情

coll.groupBy(f(_)).mapValues(_.foldLeft(x)(g(_,_)))

达到相同效果的最佳方法是什么,但避免使用 groupBy 显式构造中间集合?

最佳答案

您可以将初始集合折叠在保存中间结果的 map 上:

def groupFold[A,B,X](as: Iterable[A], f: A => B, init: X, g: (X,A) => X): Map[B,X] = 
as.foldLeft(Map[B,X]().withDefaultValue(init)){
case (m,a) => {
val key = f(a)
m.updated(key, g(m(key),a))
}
}

你说收藏我写了 Iterable ,但您必须考虑顺序在您的问题中是否重要。

如果您想要高效的代码,您可能会像 Rex 的回答一样使用可变映射。

关于scala - Scala 集合上的高效分组聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15529726/

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