当我使用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')
并且这些都不起作用,我仍然无效。
答案 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']