Roman Kanafotskiy
Roman Kanafotskiy

Reputation: 89

Make key a hash

I have a current 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}]
}

How do I make it look like this?

{
 "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}
}

Upvotes: 0

Views: 39

Answers (3)

Josh K
Josh K

Reputation: 68

Other than making sure the data comes in the way you want it,

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

Upvotes: 0

Sergio Tulentsev
Sergio Tulentsev

Reputation: 230541

As simple as

hash.transform_values(&:first)

(ruby 2.4 and later)

Upvotes: 4

Emu
Emu

Reputation: 5905

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] }

The new_hash will look like:

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}
}

Upvotes: 1

Related Questions