How-to Create an Array of Hashes in Ruby

How-to Create an Array of Hashes in Ruby

New to ruby and I'm trying to create an array of hashes (or do I have it backwards?)

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

@collection does not show the firstname for the object in position 0... What am I doing wrong?

Thanks in advance!

0

3 Answers

You're using a Symbol as the index into the Hash object that uses String objects as keys, so simply do this:

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

I would encourage you to use Symbols as Hash keys rather than Strings because Symbols are cached, and therefore more efficient, so this would be a better solution:

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

You have defined the keys of your hash as String. But then you are trying to reference it as Symbol. That won't work that way.

Try

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

You can do this:

@collection = [{ "firstname" => "Mark", "lastname" => "Martin", "age" => "24", "gender" => "M" }]
2

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

James H. Sterling
Author

James H. Sterling

James Sterling reports on renewable energy developments, climate policy, ecological conservation, and green tech innovations around the globe.