为什么Scala中没有mapKeys?

时间:2014-12-11 16:38:18

标签: scala collections

Scala Collection库有mapValuesfilterKeys。它没有mapKeys的原因可能是性能方面(关于HashMap实现),正如Haskell所讨论的那样:Why there's not mapKeys in Data.Hashmap?

然而

除了性能影响之外,我发现自己需要mapKeys至少和mapValues一样多,仅仅是为了按摩数据(即我使用地图进行数据抽象,而不是因为它的获取速度)。

我错了,您会使用哪种数据模型?元组?

2 个答案:

答案 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)

如果发生碰撞,结果可能会小于原始地图。