2010-08-06 50 views
0

这是从做puts get_account_entry.inspect如何解析这个键值对?

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

输出如何解压出来的值:名称=>“ID”,例如?最初我以为它就像一个散列,所以get_account_entry [id]会产生结果,但它不会对仔细检查有意义。

但是,我怎么得到的价值?

查让我在正确的道路上,但仍然需要帮助:

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

这是红宝石控制台输出:

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

回答

2

你靠近右边。它是一个包含哈希数组的数组,它们一起形成一种类似哈希的结构。要获得相应的名称“ID”的价值,你必须做get_entries[0].find {|field| field[:name] == 'id'}[:value]。最初的[0]让我们进入无意义的外部阵列,然后我们需要找到哪个散列有:name条目“id”,然后我们要求它输入它的:value条目的值。

如果要将此名称 - 值数据结构转换为常规散列,则可以执行Hash[get_entries[0].map {|hash| [hash[:name], hash[:value]] }]

+0

啊,有趣 - 我喜欢把它转换成正常哈希的想法...让我试试这个... – Angela 2010-08-06 16:49:24

+0

嗨,对不起,我试过并得到以下错误: 奇数参数为哈希 做我使用Hash [id] [:value]访问它? – Angela 2010-08-06 17:19:59

+0

我在上面的哈希线之前使用了一个puts来查看出现了什么,它说'奇数个参数' – Angela 2010-08-06 17:29:10

0

最外部方括号“[]”说:这个序列化表示一个数组。

您是否尝试过类似get_entries [0] [ID](或get_entries [0] [0] [ID]因为它是一个双支架)?

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 

希望这会有所帮助。

+0

啊!应该很快学会用代码块来思考而不是痛苦的迭代。查克的答案是要走的路。 – 2010-08-06 10:23:59

+0

非常感谢 - 我也这么认为,非常感谢你的回应和对chuck的+1! – Angela 2010-08-06 16:49:52