gpt4 book ai didi

Scala 集合 : array groupBy and return array indexes for each group

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

我有一个数组,类似的东西:

val a = Array("a", "c", "c", "z", "c", "b", "a")

我想得到一个映射,其中包含该数组的所有不同值的键以及每个此类组的相关索引集合的值,即对于给定的数组,答案将是:
Map(
"a" -> Array(0, 6),
"b" -> Array(5),
"c" -> Array(1, 2, 4),
"z" -> Array(3)
)

令人惊讶的是,事实证明它比我预期的要复杂一些。到目前为止,我取得的最好成绩是:
a.zipWithIndex.groupBy {
case(cnt, idx) => cnt
}.map {
case(cnt, arr) => (cnt, arr.map {
case(k, v) => v
}
}

这既不简洁也不易于理解。有更好的想法吗?

最佳答案

您的代码可以重写为 oneliner,但它看起来很难看。

as.zipWithIndex.groupBy(_._1).mapValues(_.map(_._2))

另一种方法是使用 mutable.MultiMap
import collection.mutable.{ HashMap, MultiMap, Set }

val as = Array("a", "c", "c", "z", "c", "b", "a")
val mm = new HashMap[String, Set[Int]] with MultiMap[String, Int]

然后只需添加每个绑定(bind)
as.zipWithIndex foreach (mm.addBinding _).tupled    
//mm = Map(z -> Set(3), b -> Set(5), a -> Set(0, 6), c -> Set(1, 2, 4))

终于可以转换了 mm.toMap如果你想要不可变的版本。

关于Scala 集合 : array groupBy and return array indexes for each group,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25658073/

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