2016-01-14 4 views
-1
results = [ 
    {"day"=>"2012-08-15", "name"=>"John", "calls"=>"5"}, 
    {"day"=>"2012-08-15", "name"=>"Bill", "calls"=>"8"}, 
    {"day"=>"2012-08-16", "name"=>"Bill", "calls"=>"11"}, 
] 

я могу получить доступ к хэш, используя следующий кодКак получить доступ к массив вложенных хэшей с помощью Руби

results.find {|i| i["day"] == "2012-08-15" and i["name"] == "Bill"}["calls"] 

Как я могу получить доступ к электронной почте в следующем коде

results = [ 
    {"name"=>"John", "address"=>{"email"=> "[email protected]"}}, 
    {"name"=>"Bill", "address"=>{"email"=> "[email protected]"}}, 
] 

ответ

3

Чтобы получить доступ Джона электронная почта:

results[0]["address"]["email"] 
=> "[email protected]" 

Чтобы распечатать все письма:

results.each do |result| 
    p result["address"]["email"] 
end 
+2

ли мы, знаете, если «Джон» будет в первом элементе результатов? Не было бы безопаснее найти его? –

1
results.find {|i| i["name"] == "Bill"}["address"]["email"] 

Хотя вы должны убедиться, что результат не является нулевым.

Смотреть это fiddle

+0

Спасибо @mikelowe, я не знал о rubyfiddle.com очень полезно. –

0

Если

results = [ 
    {"name"=>"Irma", "address"=>{"email"=> "[email protected]"}}, 
    {"name"=>"John", "address"=>{"email"=> "[email protected]"}}, 
    {"name"=>"Bill", "address"=>{"email"=> "[email protected]"}}, 
] 

и вы хотите, чтобы получить адрес электронной почты Джона сегодня и, возможно, завтра Ирмы, вы можете обрешеткой новый хэш:

addresses = results.map { |h| [h["name"], h["address"]["email"]] }.to_h 
    #=> {"Irma"=>"[email protected]", "John"=>"[email protected]", "Bill"=>"[email protected]"} 
+0

Спасибо, Кэри, это тоже сработало. –

Смежные вопросы