Доступ к элементам карты при использовании ключа переменной в Groovy
Я пытаюсь заменить некоторые символы в строке с карты
Случай 1
map= ['O':'0', 'L':'1', 'Z':'2', 'E':'3']
"Hey".toUpperCase().toCharArray().each{
print map.get(it,it)
}
Результат
HEY
Случай 2: я не использую toCharArray()
"Hey".toUpperCase().each{
print map.get(it,it)
}
Результат, как и ожидалось
H3Y
Поэтому я попробовал несколько вариантов при использовании toCharArray()
и единственный способ получить доступ к значению - использовать map."$it"
Почему я могу использовать только map."$it"
получить доступ к моей карте при использовании toCharArray()
?
1 ответ
Решение
Потому что вы пытаетесь получить значение с карты, используя char
пока есть каждый ключ String
и они не равны
assert !'E'.equals('E' as char)
$it
работает, потому что он преобразуется в строку:
e = 'E' as char
assert "$e".toString().equals('E')
(Обратите внимание toString()
необходимо, иначе сравнение будет происходить между String
а также GStringImpl
которые не равны)