This page contains automated test results for code from O'Reilly's Ruby Cookbook. If this code looks interesting or useful, you might want to buy the whole book.
Keeping Multiple Values for the Same Hash Key | ||
---|---|---|
Code | Expected | Actual |
hash = Hash.new { |hash, key| hash[key] = [] } raw_data = [ [1, 'a'], [1, 'b'], [1, 'c'], [2, 'a'], [2, ['b', 'c']], [3, 'c'] ] raw_data.each { |x,y| hash[x] << y } hash |
{1=>["a", "b", "c"], 2=>["a", ["b", "c"]], 3=>["c"]} | {1=>["a", "b", "c"], 2=>["a", ["b", "c"]], 3=>["c"]} |
class MultiValuedHash < Hash def []=(key, value) if has_key?(key) super(key, [value, self[key]].flatten) else super end end end hash = MultiValuedHash.new raw_data.each { |x,y| hash[x] = y } hash |
{1=>["c", "b", "a"], 2=>["b", "c", "a"], 3=>"c"} | {1=>["c", "b", "a"], 2=>["b", "c", "a"], 3=>"c"} |