访问地图值

时间:2012-08-20 18:36:34

标签: groovy map

当我使用allLang[:]打印出地图的所有内容时,我有以下名为println allLang的地图我得到以下输出:

[1:[en, de], 2:[en, de], 3:[en, de], 4:[en, de], 5:[en, de], 6:[en, de], 7:[en,
de], 8:[en], 9:[en], 10:[en, de], 11:[en, de], 12:[en, de], 13:[en, de], 14:[en,
 de], 15:[en], 16:[en], 17:[en], 18:[en], 19:[en], 27:[de], 33:[de], 34:[de], 35
:[de], 36:[de]]

然而,当我尝试打印出附加到特定键的值时,例如:

println allLang[2] 

输出为空。我尝试以多种方式访问​​该值:

println allLang['2']
println allLang.get(2)
println allLang.get('2')

并且这些都不起作用,我仍然无效。

1 个答案:

答案 0 :(得分:4)

如何定义数组?可能是索引不是'2'而是'2'(或其他一些不可打印的字符)?

最简单的方法是......

  • println allLang.inspect()

这将为您提供更好的输出:

def allLang = [1:['en','de'],'2':['en','de'],3:['en','de']]
println allLang.inspect()

=> [1:["en", "de"], "2":["en", "de"], 3:["en", "de"]]
  • 或者您可以遍历地图并检查键:

    allLang.each {key,value - >   println key.dump() }

    => <java.lang.Integer@1 value=1>

    => <java.lang.String@32 value=2 offset=0 count=1 hash=50>

    => <java.lang.Integer@3 value=3>

这应该可以帮助您找到正确的索引......

更新:搞定了!以下代码重现您的问题:

def allLang = [:] 
def codes = ['en','de']
def query = [0:[id:0l],1:[id:1l],2:[id:2l],3:[id:3l],4:[id:4l]]; 
for(def i = 0; i < query.size(); i++){ 
  allLang[(query[i].id)] = codes; 
}
println allLang
println allLang[2]
println allLang['2']

解决方案是'id used by hibernate is a Long`。因此,您必须通过长值访问您的地图:

println allLang[2l]

避免问题的最佳解决方案是避免使用数字索引:

allLang[''+(query[i].id)] = codes; 

可让您通过

访问地图
println allLang['2']