Изменение значений карты в Groovy не работает

Я использую 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") + ":"

Это приводит к о / п

value2 value returned is ::

Но если карта '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") + ":"

Это приводит к о / п

value2 value returned is :10:

Я хочу обновить пустую карту значениями, как в первом сценарии. Где я понимаю это неправильно.

Заранее спасибо.

2 ответа

Решение

Вам нужно изменить:

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

Для того, чтобы:

if( i.key in a.keySet())
   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 было таким же, как и его значение)

Другие вопросы по тегам