Groovy中的简单映射操作(特别是:添加映射)

Groovy中的简单映射操作(特别是:添加映射),groovy,map,add,Groovy,Map,Add,我无法正确理解地图操作 def map1 = [ name: 'John'] def map2 = [ name: 'Jane'] assert [ name: 'Jane'] == map1 + map2 我想得到一张这样的地图 [[ name: 'Jane'], [ name: 'John']] 当您这样做时: map1 + map2 它结合了地图,右手地图覆盖了它与左手地图共有的任何关键点 因此: 你想要的是一个地图列表。一种选择是: [ map1 ] + map2 将map1

我无法正确理解地图操作

def map1 = [ name: 'John']
def map2 =  [ name: 'Jane']

assert [ name: 'Jane'] == map1 + map2
我想得到一张这样的地图

[[ name: 'Jane'], [ name: 'John']]
当您这样做时:

map1 + map2
它结合了地图,右手地图覆盖了它与左手地图共有的任何关键点

因此:

你想要的是一个地图列表。一种选择是:

[ map1 ] + map2
将map1包装到列表中,然后将map2添加到此列表中

assert [[ name: 'John'], [ name: 'Jane']] == [ map1 ] + map2

[[name:'Jane'],[name:'John']]
是一个地图列表,而不是地图本身……感谢您更正“地图列表”,蒂姆。虽然我理解您的解释,但它仍然令人困惑,因为这个示例显示了明显不一致的结果:`
defmapone=[[id:1,firstName:'Jimmy'],[id:2,firstName:'Robert']]defmaptwo=[id:1,lastName:'Page']defmapthree=[id:2,lastName:'Plant']defmapfour=[id:1,lastName:'Page']断言mapOne+mapTwo+mapThree+mapFour=[[id:1,firstName:'Jimmy'],[id:2,firstName:'Robert'],[id:1,lastName:'Page'],[id:2,lastName:'Plant'],[id:1,lastName:'Page']]断言mapThree+mapFour=[id:1,lastName:'Page']
在第一个断言中,
mapOne
已经是地图列表,因此,您只需将其他地图添加到列表中。在第二个断言中,
mapThree
mapFour
是映射,因此我在回答中描述的键覆盖发生了,您只需使用
mapFour
就可以了,
[map1,map2]
相当于
[map1]+map2
,可能更容易掌握。我猜这取决于OP想如何使用它。当我尝试一个测试循环时,我出错了:
map=[:]map2=[id:1,lastName:'Page']I=-1,而(I++<2){map=[map]+map2 ui.informationMessage(ui.frame,“test 1:+map.toString()+“\n”)}断言map=[[[[:],[id:1,lastName:'Page']],[id:1,lastName:'Page'],[id:1,lastName:'Page']
assert [[ name: 'John'], [ name: 'Jane']] == [ map1 ] + map2