Scala Collection库有mapValues
和filterKeys
。它没有mapKeys
的原因可能是性能方面(关于HashMap
实现),正如Haskell所讨论的那样:Why there's not mapKeys in Data.Hashmap?
然而
除了性能影响之外,我发现自己需要mapKeys
至少和mapValues
一样多,仅仅是为了按摩数据(即我使用地图进行数据抽象,而不是因为它的获取速度)。
我错了,您会使用哪种数据模型?元组?
答案 0 :(得分:10)
不知道为什么它不在标准库中,但您可以使用隐式类
轻松地对您的库进行操作 implicit class MapFunctions[A, B](val map: Map[A, B]) extends AnyVal {
def mapKeys[A1](f: A => A1): Map[A1, B] = map.map({ case (a, b) => (f(a), b) })
}
val m = Map(1 -> "aaa", 2 -> "bbb")
println(m.mapKeys(_ + 1))
答案 1 :(得分:4)
您可以使用scalaz:
import scalaz.Scalaz._
val m = Map(1 -> "aaa", 2 -> "bbb")
m.mapKeys(_ + 1)
如果发生碰撞,结果可能会小于原始地图。