Ruby:从哈希中提取键和值

时间:2019-07-11 22:40:04

标签: ruby hashmap

我有一系列哈希,在提取keyvalue时遇到了麻烦。数组如下:

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"的值,但想知道是否有更好的方法。

2 个答案:

答案 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"}]