我有一系列哈希,在提取key
和value
时遇到了麻烦。数组如下:
data = [{"key"=>"Name", "value"=>"Jason"}, {"key"=>"Age", "value"=>"21"},
{"key"=>"last_name", "value"=>"bourne"}]
如何将其转换为以下哈希数组?
[{"Name"=>"Jason"}, {"Age"=>"21"}, {"last_name"=>"bourne"}]
我能够使用detect
:
a = d.detect { |x| x["key"] == "Name" }
puts a['value']
获取"name"
的值,但想知道是否有更好的方法。
答案 0 :(得分:1)
我想说,解决此问题的最优雅的方法可能是先将data
转换为Hash(假设永远不会有重复的键),就像这样:
data = data.map { |x| [x['key'], x['value']] }.to_h
# => {"Name"=>"Jason", "Age"=>"21", "last_name"=>"bourne"}
#to_h
方法期望数组的每个元素都是形式为[key, value]
的数组,因此#map
调用处理data
的每个元素以将其转换为该表格。
完成此操作后,您可以像访问其他哈希一样简单地访问密钥:
data['Name'] # => "Jason"
data['Age'] # => "21"
答案 1 :(得分:1)
如果更改了哈希,则计算不应该依赖于哈希的键。
data.map { |h| [h.values].to_h }
#=> [{"Name"=>"Jason"}, {"Age"=>"21"}, {"last_name"=>"bourne"}]