在 Groovy 中将映射与递归嵌套映射合并 [英] Merge maps with recursive nested maps in Groovy
本文介绍了在 Groovy 中将映射与递归嵌套映射合并的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想知道是否有人有一种简单的方法可以将 2 个深度嵌套的地图合并在一起?
例如,我想得到:
<预><代码>["a" : "1",动物":[猫":蓝色"]] + [乙":2,动物":[狗":红色"]] == [一个":1,乙":2,动物" : [猫":蓝色",狗":红色"]]有人有简单的解决方案吗?
解决方案
您可以使用递归为 Map
编写一个:
Map.metaClass.addNested = { Map rhs ->def lhs = 委托rhs.each { k, v ->地图中的 lhs[k] = lhs[k] ?lhs[k].addNested(v) : v }lhs}定义映射1 = ["a" : "1",动物":[猫":蓝色"]]定义地图2 = [乙":2,动物":[狗":红色"]]断言 map1.addNested( map2 ) == [一个:'1',动物:[猫:'蓝色',狗:'红色'],乙:2]
I would like to know if someone have an easy way to merge 2 deep nested maps together ?
For instance, I would like to get :
[
"a" : "1",
"animals" : ["cat" : "blue"]
] + [
"b" : 2,
"animals" : ["dog" : "red"]
] == [
"a" : 1,
"b" : 2,
"animals" : [
"cat" : "blue",
"dog" : "red"]
]
There is someone having easy solution ?
解决方案
You can write one for Map
using recursion:
Map.metaClass.addNested = { Map rhs ->
def lhs = delegate
rhs.each { k, v -> lhs[k] = lhs[k] in Map ? lhs[k].addNested(v) : v }
lhs
}
def map1 = [
"a" : "1",
"animals" : ["cat" : "blue"]
]
def map2 = [
"b" : 2,
"animals" : ["dog" : "red"]
]
assert map1.addNested( map2 ) == [
a: '1',
animals: [cat: 'blue', dog: 'red'],
b: 2
]
这篇关于在 Groovy 中将映射与递归嵌套映射合并的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文