Как получить доступ к сложному массиву хэшей - PullRequest
0 голосов
/ 22 марта 2012

У меня есть это для работы:

[
  ["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

, но это возвращает Enumerator.Есть идеи, как мне это сделать?

Ответы [ 3 ]

1 голос
/ 22 марта 2012
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

Это будет обрабатывать даже более сложные случаи, когда у вас разные структуры для разных элементов.

0 голосов
/ 23 марта 2012
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"]}
0 голосов
/ 22 марта 2012

Я думаю, что ваш первый цикл каждый цикл только по массиву, так что это будет:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...