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

Discussion in 'Ruby' started by Abder-rahman Ali, Jul 13, 2010.

  1. Abder-rahman Ali, Jul 13, 2010
    1. Advertisements

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

    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 Crocco, Jul 13, 2010
    1. Advertisements

  3. botp

    botp Guest

    On Tue, Jul 13, 2010 at 4:40 PM, Abder-rahman Ali
    <> wrote:
    > 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}


    > personal_information.each_key {|key| p key}


    > personal_information.each_value {|key| p key}

    "Abder-Rahman Ali"

    > personal_information.each {|key,value| p key}


    > personal_information.each {|key,value| p value}

    "Abder-Rahman Ali"

    kind regards -botp
    botp, Jul 13, 2010
  4. 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.
    Peter Hickman, Jul 13, 2010
  5. Abder-Rahman Ali, Jul 13, 2010
    1. Advertisements

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Replies:
  2. Mr. SweatyFinger

    why why why why why

    Mr. SweatyFinger, Nov 28, 2006, in forum: ASP .Net
    Mark Rae
    Dec 21, 2006
  3. Mr. SweatyFinger
    Smokey Grindel
    Dec 2, 2006
  4. sauce
    Apr 12, 2005
  5. yang cao
    yang cao
    Apr 9, 2007