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

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.

···

--
Posted via http://www.ruby-forum.com/.

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

···

On Tuesday 13 July 2010, Abder-rahman Ali wrote:

>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.

What am I missing in the script?

the fun :slight_smile:

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

···

On Tue, Jul 13, 2010 at 4:40 PM, Abder-rahman Ali <abder.rahman.ali@gmail.com> wrote:

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.

Thanks a lot all for your replies. It really helps.

···

--
Posted via http://www.ruby-forum.com/.