I'm trying to get the keys, but why values appear?

S

Stefano Crocco

|I'm trying to write a script that lists ONLY the keys in a hash as
|follows: http://pastie.org/private/1ruahb5w05ihsloqwmqeng
|
|The case is that when I run the script, I get the following:
|
|NameAbder-Rahman Ali
|Age26
|
|While, I'm intending to get
|
|Name
|Age
|
|What am I missing in the script?
|
|Thanks.

As you can see from the documentation (for example, with ri Hash#each),
Hash#each yields two arguments to the block: the key and the corresponding
value. Since your block only takes one argument, ruby puts both in an array,
whose to_s method produces a string with the two elements one after the other.

If you only want the key, you can use each_key rather than each, since this
will only pass the block the keys:

personal_information.each_key{|k| puts k}

If you want to use each (but you don't need to in your example), you can have
the block take two parameters and only use the first (the key):

personal_information.each{|key, val| puts key}

or have the block take a single argument (which will be an array) and use only
the first entry of the array

personal_information.each{|i| puts i[0]}

I hope this helps

Stefano
 
B

botp

What am I missing in the script?

the fun :)
personal_information.each {|key| p key}
["Name", "Abder-Rahman Ali"]
["Age", "26"]
personal_information.each {|key| p key.first} "Name"
"Age"

personal_information.each_key {|key| p key} "Name"
"Age"

personal_information.each_value {|key| p key}
"Abder-Rahman Ali"
"26"
personal_information.each {|key,value| p key} "Name"
"Age"

personal_information.each {|key,value| p value}
"Abder-Rahman Ali"
"26"


kind regards -botp
 
P

Peter Hickman

If you want the keys only you can do this
"personal_information.keys.each do |key|" or
"personal_information.each_key do |key|"

This, however, "personal_information.each do |key|" returns each
element of the hash as an array in the form [key, value]

Look here for the documentation (
http://www.ruby-doc.org/core/classes/Hash.html ), in fact this should
be the first place you look when you have a problem.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,734
Messages
2,569,441
Members
44,832
Latest member
GlennSmall

Latest Threads

Top