Доступ к элементам карты при использовании ключа переменной в 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 которые не равны)

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