On Hashes - How the hashes printing works?


#1

Hi All,

I have my code as follows:-

people = {
“torvalds”=>{“lname”=>“Torvalds”, “fname”=>“Linus”,
“job”=>“maintainer”}, “matsumoto”=>{“lname”=>“Matsumoto”,
“fname”=>“Yukihiro”, “job”=>“Ruby originator”},
“litt”=>{“lname”=>“Litt”, “fname”=>“Steve”, “job”=>“troubleshooter”}
}
keys = people.keys
for key in 0…keys.length
print "key : ", keys[key], “\n”
print "lname: ", people[keys[key]][“lname”], “\n”
print "fname: ", people[keys[key]][“fname”], “\n”
print "job : ", people[keys[key]][“job”], “\n”
print “\n\n”
end

O/p:-
key : litt
lname: Litt
fname: Steve
job : troubleshooter
key : matsumoto
lname: Matsumoto
fname: Yukihiro
job : Ruby originator
key : torvalds
lname: Torvalds
fname: Linus
job : maintainer

Question:-
Why key of “litt” is printed first thought the first key of hash is
“torvalds”?

Thanks and regards,
Neela.


#2

Hashes enumeration does not mirror insertion order.
Hashes are not ordered:

http://en.wikipedia.org/wiki/Hash_table#Drawbacks

Markus


#3

Markus S. wrote:

Hashes enumeration does not mirror insertion order.
Hashes are not ordered:

http://en.wikipedia.org/wiki/Hash_table#Drawbacks

Markus

Thank you Markus.


#4

Jou could use orderedhash gem to have hashes ordered like arrays for
example if you really need it for some reason:
http://codeforpeople.com/lib/ruby/orderedhash/

Markus S. wrote:

Hashes enumeration does not mirror insertion order.
Hashes are not ordered:

http://en.wikipedia.org/wiki/Hash_table#Drawbacks

Markus


#5

Or maintain an “order of insertion key array”.