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'
Comments
-
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 over 10 yearsI was confused with question itself, now this answer made me double confused. :( Could you tell me what was OP asking?
-
Gumbo over 10 years@ArupRakshit OP wants to use the value of
id
as key.{ id: 'foo' }
doesn’t work asid: 'foo'
is equivalent to:id => 'foo'
. -
James McMahon over 10 yearsAh so the old style hash syntax works, but not the new style. Thank you.
-
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 almost 6 yearsWhat's really cool is mixing the styles:
x = :a; puts ({y: 3, x => 5})
-
Fabrizio Bertoglio almost 5 yearsin
Ecmascript 6
you can build hashes usingvariables
likea = {"a": 100}
andb = {"b": 200}
then{a, b}
will be=> {"a": 100, "b": 200}
but I don't believe this feauture exist in ruby -
Promise Preston about 3 yearsAlso, If you want to use a key and value that are variables you can use:
MyHash = { id => foo, id2 => foo2 }
ORMyHash = Hash[id, foo, id2, foo2]
. If only the key is a variable then use:MyHash = { id => 'foo', id2 => 'foo2' }
ORMyHash = Hash[id, 'foo', id2, 'foo2']
-
pmrotule almost 3 yearsYou can also write it with string interpolation:
h = { "#{id}" => 'foo' }