【问题标题】:How do I parse this key-value pair?如何解析这个键值对?
【发布时间】:2010-08-06 04:50:31
【问题描述】:

这是puts get_account_entry.inspect的输出

[[{:value=>"8b08e26a-6d35-7140-9e41-4c5b4612c146", :name=>"id"}, {:value=>"Typhoon Corporation", :name=>"name"}]]

例如,我如何提取 :name => "id" 的值?最初我认为它就像一个哈希,所以 get_account_entry[id] 会产生结果,但仔细检查它并没有意义。

但是我如何获得这些值呢?

Chuck 让我走上了正确的道路,但仍然需要帮助:

  puts get_account_entry[0].map {|hash| [hash[:name], hash[:value]] }

这是 ruby​​ 控制台中的输出:

> id
> 8b08e26a-6d35-7140-9e41-4c5b4612c146
> name 
> Typhoon Corporation

【问题讨论】:

    标签: ruby key-value-store


    【解决方案1】:

    你已经接近正确了。它是一个包含 Hash 数组的数组,它们一起形成了一种类似 Hash 的结构。要获取具有相应名称“id”的值,您必须执行get_entries[0].find {|field| field[:name] == 'id'}[:value]。初始的[0] 让我们进入了无意义的外部数组,然后我们需要找到哪个哈希具有:name 条目“id”,然后我们向它询问其:value 条目的值。

    如果您想将此名称-值数据结构转换为普通哈希,您可以使用Hash[get_entries[0].map {|hash| [hash[:name], hash[:value]] }]

    【讨论】:

    • 啊,有趣——我喜欢转换成普通哈希的想法……让我试试……
    • 嗨,对不起,我尝试并得到以下错误: Hash 的参数为奇数 我是否使用 Hash[id][:value] 访问它?
    • 我在上面的 Hash 行之前使用了 puts 来查看结果并显示“奇数个参数”
    【解决方案2】:

    最外面的方括号“[]”表示这个序列化代表一个数组。

    您是否尝试过类似 get_entries[0][id](或 get_entries[0][0][id],因为它是双括号)? p>

    【讨论】:

      【解决方案3】:

      这就是我的处理方式。

      a= [[{:value=>"8b08e26a-6d35-7140-9e41-4c5b4612c146", :name=>"id"}, {:value=>"Typhoon Corporation", :name=>"name"}]]
      
      a[0].each do |hash|
        hash.each_pair do |k,v|
          puts v
        end
      end
      

      希望这会有所帮助。

      【讨论】:

      • 啊!应该很快学会用代码块而不是痛苦的迭代来思考。查克的答案是要走的路。
      • 非常感谢——我也这么认为,感谢您的回复和对查克的 +1!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-18
      • 1970-01-01
      • 2016-01-28
      相关资源
      最近更新 更多