Elegant way to invert a map in Scala

前端 未结 10 593
慢半拍i
慢半拍i 2020-12-02 13:49

Learning Scala currently and needed to invert a Map to do some inverted value->key lookups. I was looking for a simple way to do this, but came up with only:



        
10条回答
  •  心在旅途
    2020-12-02 14:27

    In scala REPL:

    scala> val m = Map(1 -> "one", 2 -> "two")
    m: scala.collection.immutable.Map[Int,java.lang.String] = Map(1 -> one, 2 -> two)
    
    scala> val reversedM = m map { case (k, v) => (v, k) }
    reversedM: scala.collection.immutable.Map[java.lang.String,Int] = Map(one -> 1, two -> 2)
    

    Note that duplicate values will be overwritten by the last addition to the map:

    scala> val m = Map(1 -> "one", 2 -> "two", 3 -> "one")
    m: scala.collection.immutable.Map[Int,java.lang.String] = Map(1 -> one, 2 -> two, 3 -> one)
    
    scala> val reversedM = m map { case (k, v) => (v, k) }
    reversedM: scala.collection.immutable.Map[java.lang.String,Int] = Map(one -> 3, two -> 2)
    

提交回复
热议问题