如何访问哈希
问题描述:
我有这个工作与复杂的阵列:如何访问哈希
[
["app1", {"name"=>"name1", "path"=>"xyz.com/"}],
["app2", {"name"=>"name2", "path"=>"xyz.com/"}],
["app3", {"name"=>"name3", "path"=>"xyz.com/"}],
# etc.
]
我希望能够访问每个名称和路径,所以我尝试:
apps.each do |key, value|
value.each do |key, value|
puts value
end
end
但这返回枚举。任何想法我怎么能做到这一点?
答
apps = [["app1", {"name"=>"name1", "path"=>"https://xyz.com/"}], ["app2", {"name"=>"name2", "path"=>"https:/xyz.com/"}], ["app3", {"name"=>"name3", "path"=>"https://xyz.com/"}]]
apps.flatten.each do |t|
next unless t.class == Hash
next unless t.key?("name")
next unless t.key?("path")
puts t.inspect # now t is a hash that has both "name" and "path" keys - do what you want
end
当你有不同的元素不同的结构本可以处理得有些更复杂的情况。
答
我想你的第一个每个循环只遍历数组,所以这将是:
apps.each do |app|
app.each do |key, value|
puts key # would be app1 in the first array
puts value["name"]
puts value["path"]
end
end
答
ar = [
["app1", {"name"=>"name1", "path"=>"xyz.com/"}],
["app2", {"name"=>"name2", "path"=>"xyz.com/"}],
["app3", {"name"=>"name3", "path"=>"xyz.com/"}]
]
#Get a specific app:
p ar.assoc("app2").last["name"]
#Get all names and paths
ar.each{|app| name, path = app.last["name"], app.last["path"]}
考虑为这种事情创建自己的'类' - 更具可读性。 – Reactormonk 2012-03-22 15:35:36