КАК создать массив хэшей в Ruby - PullRequest
21 голосов
/ 28 января 2011

плохо знаком с ruby, и я пытаюсь создать массив хэшей (или он у меня задом наперед?)

def collection
  hash = { "firstname" => "Mark", "lastname" => "Martin", "age" => "24", "gender" => "M" }
  array = []
  array.push(hash)
  @collection = array[0][:firstname]
end

@ collection не показывает имя объекта в позиции 0 ... Что я делаю не так?

Заранее спасибо!

Ответы [ 3 ]

48 голосов
/ 28 января 2011

Вы используете Symbol в качестве индекса для объекта Hash, который использует String объекты в качестве ключей, поэтому просто сделайте это:

@collection = array[0]["firstname"]

Я бы посоветовал вам использовать Symbol s в качестве Hash s ключей вместо String s, потому что Symbol s кэшируются и, следовательно, более эффективны, так что это будет лучшим решением:

def collection
  hash = { :firstname => "Mark", :lastname => "Martin", :age => 24, :gender => "M" }
  array = []
  array.push(hash)
  @collection = array[0][:firstname]
end
2 голосов
/ 23 января 2015

Вы можете сделать это:

@collection = [{ "firstname" => "Mark", "lastname" => "Martin", "age" => "24", "gender" => "M" }]
2 голосов
/ 28 января 2011

Вы определили ключи своего хэша как String. Но тогда вы пытаетесь сослаться на это как Symbol. Это не сработает.

Попробуйте

@collection = array[0]["firstname"]
...