Kur*_*nes 4 scala scala-collections
我有一个Map [String,List [String]],我想反转它.例如,如果我有类似的东西
"1" -> List("a","b","c")
"2" -> List("a","j","k")
"3" -> List("a","c")
Run Code Online (Sandbox Code Playgroud)
结果应该是
"a" -> List("1","2","3")
"b" -> List("1")
"c" -> List("1","3")
"j" -> List("2")
"k" -> List("2")
Run Code Online (Sandbox Code Playgroud)
我试过这个:
m.map(_.swap)
Run Code Online (Sandbox Code Playgroud)
但它返回一个Map [List [String],String]:
List("a","b","c") -> "1"
List("a","j","k") -> "2"
List("a","c") -> "3"
Run Code Online (Sandbox Code Playgroud)
地图反演有点复杂.
val m = Map("1" -> List("a","b","c")
,"2" -> List("a","j","k")
,"3" -> List("a","c"))
m flatten {case(k, vs) => vs.map((_, k))} groupBy (_._1) mapValues {_.map(_._2)}
//res0: Map[String,Iterable[String]] = Map(j -> List(2), a -> List(1, 2, 3), b -> List(1), c -> List(1, 3), k -> List(2))
Run Code Online (Sandbox Code Playgroud)
将其展平Map为一组元组.groupBy将Map使用旧值作为新键创建一个新的.然后通过删除键(先前值)元素来取消元组值.
| 归档时间: |
|
| 查看次数: |
268 次 |
| 最近记录: |