Anyone know of any ruby shortcuts for multiply assigning elements in a
hash?
What I need to do is set up a hash like this…
{ “one” => “A”, “two”=>“A”, “three” => “A” }
What I would like to do is something like this…
{ “one”,“two”,“three” => “A” } (this doesn’t work)
_Kevin
www.sciwerks.com
On Aug 13, 2006, at 10:43 PM, Kevin O. wrote:
keys = %w(one two three)
hash = Hash[ *keys.zip(Array.new(keys.length){“A”}).flatten ]
Or maybe in this case the default is good enough?
hash = Hash.new { |h,k| h[k] = “A” }
hash.values_at(“one”, “two”, “three”)
p hash
Logan C. wrote:
keys = %w(one two three)
hash = Hash[ *keys.zip(Array.new(keys.length){“A”}).flatten ]
Why complicated when you could do it easier and clearer:
hash = {}
%w(one two three).each{ |k| hash[k] = “A” }
Robin
On Aug 14, 2006, at 7:47 AM, Robin S. wrote:
I dunno. Didn’t think of it at the time.
Kevin O. wrote:
Anyone know of any ruby shortcuts for multiply assigning elements in a hash?
What I need to do is set up a hash like this…
{ “one” => “A”, “two”=>“A”, “three” => “A” }
What I would like to do is something like this…
{ “one”,“two”,“three” => “A” } (this doesn’t work)
Perhaps this?
class Hash
def []= (*keys)
value = keys.pop
keys.each{|key| store(key, value) }
end
end
hsh = {}
hsh[:a, :b, :c] = 42
hsh #=> {:a => 42, :b => 42, :c => 42}
Do remember that all keys will have the same value, so:
hsh[:a, :b] = “foo”
hsh[:a].upcase!
hsh[:b] #=> “FOO”
Cheers,
Daniel