在集合 Scala 2.11.12 中的某些位置连接地图

Posted

技术标签:

【中文标题】在集合 Scala 2.11.12 中的某些位置连接地图【英文标题】:Concatenate maps at certain places in set Scala 2.11.12 【发布时间】:2022-01-23 22:28:06 【问题描述】:

鉴于此代码:

Set(("rain", Map("none" -> 1), ("wind", Map("normal" -> 1))))
Map("rain" -> Map("slight" -> 0, "none" -> 0), "wind" -> ("normal" -> 0, "strong" -> 0, "weak" -> 0))

我怎样才能得到以下输出:

Set(("rain", Map("none" -> 1, "slight" -> 1), ("wind", Map("normal" -> 1, "strong" -> 0, "weak" -> 0))))

【问题讨论】:

你尝试了什么?什么不起作用? Maps 是自定义类型还是只是 Map 的拼写错误? (rain, Maps(none -> 1, slight -> 1) 的规则是什么? @Dylan 这是一个错字。 现在应该可以编译了,我忘了括号@jwvh 【参考方案1】:

所以你有几个非常混乱的集合类型。

你有一个 Set 的元组...

val s: Set[(String,Map[String,Int])] = ...

...还有一张Map 的地图...

val m: Map[String,Map[String,Int]] = ...

...您想使用从Map 收集的相关数据来增强Set

不幸的是,您的示例结果留下了许多未回答的问题,例如:如果 Set 包含天气条件(例如:"snow")或条件级别(例如:"rain"-@987654330 @),这在 Map 数据中不存在?

我对它的行为方式做了一些最好的猜测。

val r =
  s.map case (weather,level) =>
    val keys = level.keySet ++ m.getOrElse(weather, Map()).keySet
    weather -> keys.map(k => (k, level.getOrElse(k,0) +
                         m.get(weather).flatMap(_.get(k)).getOrElse(0))
                       ).toMap
  

【讨论】:

以上是关于在集合 Scala 2.11.12 中的某些位置连接地图的主要内容,如果未能解决你的问题,请参考以下文章

Scala中的集合类型

用 Scala List 中的下一个或上一个元素替换某些元素

Scala 中 10 个超赞的集合操作函数

在CentOS7中安装scala-2.11.12

Scala入门系列(十三):类型参数

spark windows idea开发环境搭建