使密钥成为哈希

时间:2018-03-13 09:38:17

标签: ruby-on-rails

我有一个当前哈希:

{
 "2018-03-12"=>[{:date=>"2018-03-12", :net_revenue=>0.044}], 
 "2018-03-11"=>[{:date=>"2018-03-11", :net_revenue=>0.033}],
 "2018-03-10"=>[{:date=>"2018-03-10", :net_revenue=>298.860}]
}

如何让它看起来像这样?

{
 "2018-03-12"=>{:date=>"2018-03-12", :net_revenue=>0.044}, 
 "2018-03-11"=>{:date=>"2018-03-11", :net_revenue=>206.008},
 "2018-03-10"=>{:date=>"2018-03-10", :net_revenue=>298.860}
}

3 个答案:

答案 0 :(得分:4)

就像

一样简单
hash.transform_values(&:first)

(红宝石2.4及以后)

答案 1 :(得分:1)

hash = {
 "2018-03-12"=>[{:date=>"2018-03-12", :net_revenue=>0.044}], 
 "2018-03-11"=>[{:date=>"2018-03-11", :net_revenue=>0.033}],
 "2018-03-10"=>[{:date=>"2018-03-10", :net_revenue=>298.860}]
}
new_hash = hash.each { |k, v| hash[k] = v[0] }

new_hash 将如下所示:

new_hash = {
 "2018-03-12"=>{:date=>"2018-03-12", :net_revenue=>0.044}, 
 "2018-03-11"=>{:date=>"2018-03-11", :net_revenue=>0.033},
 "2018-03-10"=>{:date=>"2018-03-10", :net_revenue=>298.860}
}

答案 2 :(得分:0)

除了确保数据以您希望的方式出现之外,

hash.each do |key, val|
  hash[key] = val.first
end