【问题标题】:accessing map values访问地图值
【发布时间】:2012-08-20 18:36:34
【问题描述】:

您好,当我使用 println allLang 打印出地图的所有内容时,我有一个名为 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')

这些都不起作用,我仍然得到空值。

【问题讨论】:

    标签: groovy map


    【解决方案1】:

    你如何定义数组?难道索引不是'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 {键,值-> 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']
    

    解决方案是,'idused by hibernate is aLong`。所以你必须通过长值访问你的地图:

    println allLang[2l]
    

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

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

    将让您通过

    访问您的地图
    println allLang['2']
    

    【讨论】:

    • 当我使用 .inspect() 方法打印它时,我得到以下输出:[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] 应该可以工作。你如何定义地图?
    • 我定义了一个空的静态映射static allLang = [:],我慢慢地用正确的键值对填充它
    • 请发布一个如何添加键值对的示例。我想在我的 groovy 控制台中重现该问题...
    • static allLang = [:] def query = Domain.list(); for(def i = 0; i &lt; query.size(); i++){ allLang[(query[i].id)] = codes; } 其中代码是与具有给定 id 的条目相关的语言代码列表
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    • 2017-01-07
    • 2020-12-30
    相关资源
    最近更新 更多