如何解析此键值对?

时间:2010-08-06 04:50:31

标签: ruby key-value-store

这是执行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

3 个答案:

答案 0 :(得分:2)

你接近正确。它是一个包含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]] }]

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

这就是我的方法。

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

希望这有帮助。