Dictionary 在Groovy中使用变量键时访问映射元素

Dictionary 在Groovy中使用变量键时访问映射元素,dictionary,groovy,groovy-console,Dictionary,Groovy,Groovy Console,我正在尝试替换映射中字符串中的一些字符 案例1 ​map= ['O':'0', 'L':'1', 'Z':'2', 'E':'3'] "Hey".toUpperCase().toCharArray().each{ print map.get(it,it) } 结果是 HEY 案例2:我不使用tocharray() 结果与预期一样 H3Y 因此,我在使用tocharray()时尝试了几种替代方法,访问该值的唯一方法是使用map.“$it” 为什么我只能使用map.

我正在尝试替换映射中字符串中的一些字符

案例1

​map= ['O':'0', 'L':'1', 'Z':'2', 'E':'3']
"Hey".toUpperCase().toCharArray().each{
         print map.get(it,it)
     }
结果是

HEY
案例2:我不使用
tocharray()

结果与预期一样

H3Y
因此,我在使用
tocharray()
时尝试了几种替代方法,访问该值的唯一方法是使用
map.“$it”


为什么我只能使用
map.“$it”
在使用
ToCharray()
时访问我的映射?

因为您试图使用
char
从映射中获取值,而每个键都是
字符串,并且它们不相等:

assert !'E'.equals('E' as char)
$it
之所以有效,是因为它被转换为字符串:

e = 'E' as char

assert "$e".toString().equals('E')

(请注意,需要使用
toString()
,否则将在
String
GStringImpl
之间进行比较,它们不相等)

,因为您试图使用
char
从映射中获取值,而每个键都是
String
,并且它们不相等:

assert !'E'.equals('E' as char)
$it
之所以有效,是因为它被转换为字符串:

e = 'E' as char

assert "$e".toString().equals('E')

(注意
toString()
是必需的,否则将在
String
GStringImpl
之间进行比较,这两个字符串不相等)

不回答问题,但另一种选择是
map=['O':'0','L':'1','Z':'2','E':'3'];println“Hey”.toUpperCase().collect{map[it]}.join()
不回答这个问题,但另一种选择是
map=['O':'0','L':'1','Z':'2','E':'3'];println“Hey”.toUpperCase().collect{map[it]}.join()
当我在案例2中使用
each
而不使用
toCharArray()
时,
it
是一个字符串?是的<代码>$groovy-e''foo'。每个{assert it in String}'
当我在案例2中使用
each
而不使用
tocharray()
时,
it
是一个字符串?是的<代码>$groovy-e''foo'。每个{assert it in String}'