【问题标题】:Convert List[Map[String,Map[String,Int]]] to Map[Int,Int] in Scala在 Scala 中将 List[Map[String,Map[String,Int]]] 转换为 Map[Int,Int]
【发布时间】:2016-10-09 20:55:06
【问题描述】:

鉴于以下情况:

val t: List[Map[String, Map[String, Int]]] = List(
  Map("a" -> Map("m" -> 1, "l" -> 21)),
    Map("a" -> Map("m" -> 2, "l" -> 22)),
    Map("a" -> Map("m" -> 3, "l" -> 23)),
    Map("a" -> Map("m" -> 4, "l" -> 24))
)

我想要结果:

Map(1->21,2->22,3->23,4->24)

到目前为止我所拥有的是:

val tt = (for {
  (k,v) <- t
  newKey = v("m")
  newVal = v("l")
} yield Map(newKey -> newVal)).flatten.toMap

但这并没有类型检查,所以我缺少一些基本的理解,因为我不明白为什么不呢?

我的问题是:

  1. 为什么我的代码有问题?
  2. 进行我想要的转换最惯用的方法是什么?

【问题讨论】:

    标签: scala


    【解决方案1】:

    你有List[Map[...]],而不是Map[...],所以你想先解压。

    val tt = (for {
      map <- t
      (k, v) <- map
    } ...)
    

    【讨论】:

      【解决方案2】:
        t
         .iterator
         .flatMap(_.values)
         .map { v => v("m") -> v("l") }
         .toMap
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-01
        • 1970-01-01
        • 2016-07-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多