Ruby: Creating a hash key and value from a variable in Ruby

66,828

If you want to populate a new hash with certain values, you can pass them to Hash::[]:

Hash["a", 100, "b", 200]             #=> {"a"=>100, "b"=>200}
Hash[ [ ["a", 100], ["b", 200] ] ]   #=> {"a"=>100, "b"=>200}
Hash["a" => 100, "b" => 200]         #=> {"a"=>100, "b"=>200}

So in your case:

Hash[id, 'foo']
Hash[[[id, 'foo']]]
Hash[id => 'foo']

The last syntax id => 'foo' can also be used with {}:

{ id => 'foo' }

Otherwise, if the hash already exists, use Hash#=[]:

h = {}
h[id] = 'foo'
Share:
66,828
James McMahon
Author by

James McMahon

Blogging at https://dev.to/jamesmcmahon.

Updated on July 10, 2022

Comments

  • James McMahon
    James McMahon almost 2 years

    I have a variable id and I want to use it as a key in a hash so that the value assigned to the variable is used as key of the hash.

    For instance, if I have the variable id = 1 the desired resulting hash would be { 1: 'foo' }.

    I've tried creating the hash with,

    {
      id: 'foo'
    }
    

    But that doesn't work, instead resulting in a hash with the symbol :id to 'foo'.

    I could have sworn I've done this before but I am completely drawing a blank.

  • Arup Rakshit
    Arup Rakshit over 10 years
    I was confused with question itself, now this answer made me double confused. :( Could you tell me what was OP asking?
  • Gumbo
    Gumbo over 10 years
    @ArupRakshit OP wants to use the value of id as key. { id: 'foo' } doesn’t work as id: 'foo' is equivalent to :id => 'foo'.
  • James McMahon
    James McMahon over 10 years
    Ah so the old style hash syntax works, but not the new style. Thank you.
  • mu is too short
    mu is too short over 10 years
    @James: The JavaScript style only works with a limited set of symbols and only works in Hash literals. You can't use the JavaScript style if the key not a symbol (with a limited format).
  • Ray Toal
    Ray Toal almost 6 years
    What's really cool is mixing the styles: x = :a; puts ({y: 3, x => 5})
  • Fabrizio Bertoglio
    Fabrizio Bertoglio almost 5 years
    in Ecmascript 6 you can build hashes using variables like a = {"a": 100} and b = {"b": 200} then {a, b} will be => {"a": 100, "b": 200} but I don't believe this feauture exist in ruby
  • Promise Preston
    Promise Preston about 3 years
    Also, If you want to use a key and value that are variables you can use: MyHash = { id => foo, id2 => foo2 } OR MyHash = Hash[id, foo, id2, foo2]. If only the key is a variable then use: MyHash = { id => 'foo', id2 => 'foo2' } OR MyHash = Hash[id, 'foo', id2, 'foo2']
  • pmrotule
    pmrotule almost 3 years
    You can also write it with string interpolation: h = { "#{id}" => 'foo' }