在groovy中更改映射值不会';行不通

在groovy中更改映射值不会';行不通,groovy,groovy-console,Groovy,Groovy Console,我使用的是Groovy 2.1.0版。我正在尝试从一个映射读取值并更新另一个映射 a = ["key1":"" ,"key2":""] b = ["key1": "10", "key3":"99" ] for (i in b){ if( i.key in a) a.(i.key) = i.value } def key2 = "key2" a.key2 = "value2" println a.get("key2") println "value returned is :" + a.g

我使用的是Groovy 2.1.0版。我正在尝试从一个映射读取值并更新另一个映射

a = ["key1":"" ,"key2":""]
b = ["key1": "10", "key3":"99" ]
for (i in b){
 if( i.key in a)
   a.(i.key) = i.value
}
def key2 = "key2"
a.key2 = "value2"
println a.get("key2")
println "value returned is :" + a.get("key1") + ":"
这将导致o/p

value2
返回的值为::

但是,如果映射“a”不包含空字符串作为值,那么它可以正常工作

a = ["key1":"7" ,"key2":""]
b = ["key1": "10", "key3":"99" ]
for (i in b){
 if( i.key in a)
   a.(i.key) = i.value
}
a."key2" = "value2"
println a.get("key2")
println "value returned is :" + a.get("key1") + ":"
这将导致o/p

value2
返回的值为:10:

我想用值更新空映射,就像在第一个场景中一样。我哪里弄错了

提前感谢。

您需要更改:

if( i.key in a)
   a.(i.key) = i.value
致:

您需要更改:

if( i.key in a)
   a.(i.key) = i.value
致:


正如蛋白石所说,是
if
造成了困难

if( i.key in a)
如果键不在映射中,或者该值等于Groovy False,则将失败

你可以做:

a = ["key1":"" ,"key2":""]
b = ["key1": "10", "key3":"99" ]

a = (a+b).findAll { k, v -> k in a.keySet() }

def key2 = "key2"
a[ key2 ] = "value2"

println a.key2
println "value returned is : $a.key1 :"

(小心,您的
key2
位没有达到我相信您预期的效果(它的工作原理是您的
key2
var名称与其值相同)

正如Opal所说,是
if
造成了困难

if( i.key in a)
如果键不在映射中,或者该值等于Groovy False,则将失败

你可以做:

a = ["key1":"" ,"key2":""]
b = ["key1": "10", "key3":"99" ]

a = (a+b).findAll { k, v -> k in a.keySet() }

def key2 = "key2"
a[ key2 ] = "value2"

println a.key2
println "value returned is : $a.key1 :"
(小心,您的
key2
位没有达到我相信您预期的效果(它的工作原理是您的
key2
var名称与其值相同)