【问题标题】:Handling of Nested Maps嵌套地图的处理
【发布时间】:2020-07-23 10:50:43
【问题描述】:

我有一个 Map,它有一个包含另一个 Map 的键。 即-

val myDetailsMap = Map("name" -> "abc",
                       "class" -> "10",
                       "section" -> "A",
                       "marksPerSubjectId" -> Map(101 -> "Physics= '70' AND Chemistry='80'",
                                                  102 -> "History= '60' AND Civics = '67'"),
                       "status" -> "pass")

现在,我想使用 foreach 遍历包含另一个 MAP 的 marksPerSubjectId 键。我应该怎么做?

在 Databricks 上 -

【问题讨论】:

  • 这是非常糟糕的类型。你基本上在那里有一个Map[String, Any]。为什么要这样建模?
  • @MateuszKubuszok,问题是我正在从 Databricks 小部件中获取输入。为了有一个干净的输入,我将所有内容都存储在地图中,我正在使用确切的场景对其进行更新,也许你可以建议我一种更好的方法来从数据块小部件中获取数据

标签: scala databricks


【解决方案1】:

如何使用模式匹配?

在 Scala 2.13 中:

myDetailsMap.foreachEntry{ (k, v) =>
  v match {
    case map: Map[_, _] => map.foreachEntry{ (k, v) => println(v)}
    case other => println(other)
  }
}

在 Scala 2.11 中:

myDetailsMap.foreach{ case (k, v) =>
  v match {
    case map: Map[_, _] => map.foreach{ case (k, v) => println(v)}
    case other => println(other)
  }
}

【讨论】:

  • 谢谢@kanbangoly,但这给了我这个错误 - command-14666149:8: error: value foreachEntry is not a member of scala.collection.immutable.Map[String,Object] myDetailsMap.foreachEntry{ (k, v) =>
  • 你有什么版本的Scala?也许 foreachEntry 仅适用于 2.13>= 。如果你有旧版本,你可以试试foreach而不是foreachEntry吗?
  • 我在 2.11。无法升级到更高版本,它的任务是在 2.11 上。
  • 是否可以同时将foreachEntry 更改为foreach
  • foreach 有效。新错误 - command-14666149:8: error: missing parameter type Note: The expected type requires a one-argument function accepting a 2-Tuple. Consider a pattern matching anonymous function, { case (k, v) => ... }` myDetailsMap.foreach{ (k, v)`
猜你喜欢
  • 1970-01-01
  • 2019-02-28
  • 2017-02-24
  • 1970-01-01
  • 2020-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-11
相关资源
最近更新 更多