Linju
Linju

Reputation: 335

How do I return some hash values from a nested hash

I need to retrieve some values from a nested hash array like this:

{:id=>1, :field_id=>200, :name=>"01", :midpoint=>{:lat=>"37.716801", :lng=>"-120.604216"}}
{:id=>2, :field_id=>201, :name=>"02", :midpoint=>{:lat=>"37.717551", :lng=>"-120.608567"}}
{:id=>3, :field_id=>202, :name=>"03", :midpoint=>{:lat=>"37.714297", :lng=>"-120.612967"}}
{:id=>4, :field_id=>203, :name=>"04", :midpoint=>{:lat=>"37.714591", :lng=>"-120.615368"}}
{:id=>5, :field_id=>204, :name=>"05", :midpoint=>{:lat=>"37.710421", :lng=>"-120.616498"}}

I am able to get an array of values for one key using hash.map() like this:

idArray = inputHash.map { |k| k[:id]}

However I want to get (a hash of) [:name] and [:id]. Something like this:

{:id=>1, :field_id=>200}
{:id=>2, :field_id=>201}
{:id=>3, :field_id=>202}
{:id=>4, :field_id=>203}
{:id=>5, :field_id=>204}

Upvotes: 1

Views: 73

Answers (2)

Arup Rakshit
Arup Rakshit

Reputation: 118261

You should do :

array_of_hash.collect { |h| { id: h[:id], field_id: h[:field_id] } }

Upvotes: 0

Amit Suroliya
Amit Suroliya

Reputation: 1535

Try -

  idArray = inputHash.map { |k| {:id => k[:id], :field_id => k[:field_id]}}

Upvotes: 2

Related Questions