繁体   English   中英

如何在scala中习惯性地将一个元组序列转换为Map?

[英]How to idiomatically turn a Seq of tuples into a Map in scala?

我有这个

list {
  1,1
  1,2
  2,1
}

我想把它变成这个

map {
  1 -> (1,2)
  2 -> (1)
}

到目前为止我尝试过的是:

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))
}

不用说,好像有人在我的代码上撒了牛奶。 情况如何改善?

您正在寻找.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)))

然后,您只需要映射值并选择每对夫妇的第二个元素:

scala> val map = list.groupBy(_._1).mapValues(_.map(_._2))
map: Map[Int,List[Int]] = Map(2 -> List(1), 1 -> List(1, 2))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM