[英]How Scala transfers a Seq of Pair to a Map?
我有一些价值如下:
Seq((1, Some("one")), (1, Some("two")), (1, Some("three")), (2, Some("four")), (2, Some("five")), (3, None))
什么是转换为的最佳方式:
Map(1 -> Seq("one", "two", "three"), 2 -> Seq("four", "five"), 3 -> Seq())
试试这个:
val map = orig_data.groupBy(_._1).mapValues(_.flatMap(_._2))
@Shadowlands的类似方法,但是使用for comprehension,从分组中提取和映射键和列表值,就像这样
for ( (k,xss) <- xs.groupBy(_._1) ) yield k -> xss.flatMap(_._2)
使用fold
另一个解
scala> seq.foldLeft(Map.empty[Int, Seq[String]].withDefaultValue(Nil)) {
| case (m, (k, v)) => m.updated(k, m(k)++v)
| }
res1: scala.collection.immutable.Map[Int,Seq[String]] =
Map(1 -> List(one, two, three), 2 -> List(four, five), 3 -> List())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.