gur*_*het 0 scala scala-collections
我有这个
list {
1,1
1,2
2,1
}
Run Code Online (Sandbox Code Playgroud)
我想把它变成这个
map {
1 -> (1,2)
2 -> (1)
}
Run Code Online (Sandbox Code Playgroud)
到目前为止我尝试了什么:
val list = List((1,1),(1,2),(2,1))
var map: Map[Int, Seq[Int]] = Map()
for (e <- list) {
if (map contains e._1)
map = map + (e._1 -> (map(e._1) :+ e._2))
else
map = map + (e._1 -> Seq(e._2))
}
Run Code Online (Sandbox Code Playgroud)
不用说,看起来有人在我的代码上洒了牛奶.如何改善这种情况?
你正在寻找.groupBy方法:
scala> val list = List((1,1),(1,2),(2,1))
list: List[(Int, Int)] = List((1,1), (1,2), (2,1))
scala> val map = list.groupBy(_._1)
map: Map[Int,List[(Int, Int)]] = Map(2 -> List((2,1)), 1 -> List((1,1), (1,2)))
Run Code Online (Sandbox Code Playgroud)
然后你只需要映射值并选择每对的第二个元素:
scala> val map = list.groupBy(_._1).mapValues(_.map(_._2))
map: Map[Int,List[Int]] = Map(2 -> List(1), 1 -> List(1, 2))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
517 次 |
| 最近记录: |