如何使用 ruby 访问嵌套哈希数组
How to access array of nested hashes using ruby
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"=> "john@example.com"}},
{"name"=>"Bill", "address"=>{"email"=> "bill@example.com"}},
]
要访问 John 的电子邮件:
results[0]["address"]["email"]
=> "john@example.com"
要打印所有电子邮件:
results.each do |result|
p result["address"]["email"]
end
results.find {|i| i["name"] == "Bill"}["address"]["email"]
尽管您应该验证结果不为空。
看到这个fiddle
如果
results = [
{"name"=>"Irma", "address"=>{"email"=> "irma@example.com"}},
{"name"=>"John", "address"=>{"email"=> "john@example.com"}},
{"name"=>"Bill", "address"=>{"email"=> "bill@example.com"}},
]
并且您希望今天获取 John 的电子邮件地址,也许明天获取 Irma 的电子邮件地址,您可能希望创建一个新哈希:
addresses = results.map { |h| [h["name"], h["address"]["email"]] }.to_h
#=> {"Irma"=>"irma@example.com", "John"=>"john@example.com", "Bill"=>"bill@example.com"}
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"=> "john@example.com"}},
{"name"=>"Bill", "address"=>{"email"=> "bill@example.com"}},
]
要访问 John 的电子邮件:
results[0]["address"]["email"]
=> "john@example.com"
要打印所有电子邮件:
results.each do |result|
p result["address"]["email"]
end
results.find {|i| i["name"] == "Bill"}["address"]["email"]
尽管您应该验证结果不为空。
看到这个fiddle
如果
results = [
{"name"=>"Irma", "address"=>{"email"=> "irma@example.com"}},
{"name"=>"John", "address"=>{"email"=> "john@example.com"}},
{"name"=>"Bill", "address"=>{"email"=> "bill@example.com"}},
]
并且您希望今天获取 John 的电子邮件地址,也许明天获取 Irma 的电子邮件地址,您可能希望创建一个新哈希:
addresses = results.map { |h| [h["name"], h["address"]["email"]] }.to_h
#=> {"Irma"=>"irma@example.com", "John"=>"john@example.com", "Bill"=>"bill@example.com"}