如何从两个地图地图创建新地图,以便生成的地图仅包含键相同的匹配项并组合内部地图.
Iterable[Map[String, Map[String,Float]]
Run Code Online (Sandbox Code Playgroud)
例:
val map1 = Iterable(Map(
1 -> Map(key1 -> val1),
2 -> Map(key2 -> val2),
3 -> Map(key3 -> val3)
))
val map2 = Iterable(Map(
1 -> Map(key11 -> val11),
3 -> Map(key33 -> val33),
4 -> Map(key44 -> val44),
5 -> Map(key55 -> val55)
))
Run Code Online (Sandbox Code Playgroud)
我想得到的地图如下:
Map(
1 -> Map(key1 -> val1, key11 -> val11),
3 -> Map(key3 -> val3, key33 -> val33)
)
Run Code Online (Sandbox Code Playgroud)
Tra*_*own 10
更新:我真的不明白你对Iterables 的编辑意味着什么,或者评论中的错误,但这里有一个完整的Strings和Floats的工作示例:
val map1: Map[Int, Map[String, Float]] = Map(
1 -> Map("key1" -> 1.0F),
2 -> Map("key2" -> 2.0F),
3 -> Map("key3" -> 3.0F))
val map2: Map[Int, Map[String, Float]] = Map(
1 -> Map("key11" -> 11.0F),
3 -> Map("key33" -> 33.0F),
4 -> Map("key44" -> 44.0F),
5 -> Map("key55" -> 55.0F))
val map3: Map[Int, Map[String, Float]] = for {
(k, v1) <- map1
v2 <- map2.get(k)
} yield (k, v1 ++ v2)
Run Code Online (Sandbox Code Playgroud)
更新以回应下面的问题:拥有一个地图列表并没有多大意义,每个地图都包含一个映射.您可以使用reduceLeft以下方法将它们组合成单个地图:
val maps = List(
Map(1216 -> Map("key1" -> 144.0F)),
Map(1254 -> Map("key2" -> 144.0F)),
Map(1359 -> Map("key3" -> 144.0F))
)
val bigMap = maps.reduceLeft(_ ++ _)
Run Code Online (Sandbox Code Playgroud)
现在你有一个大的整数映射到字符串到浮点数的映射,你可以插入我上面的答案.
val keys = map1.keySet & map2.keySet
val map3 = keys.map(k => k -> (map1(k) ++ map2(k)))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2681 次 |
| 最近记录: |