Изменение значений карты в 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 было таким же, как и его значение)