我是Ruby / Rails的新手,我正在试图弄清楚如何将{"key" => ["val1", "val2"]}
哈希拆分为{"key" => "val1", "key" => "val2"}
哈希。我觉得我应该压扁哈希并以某种方式建立一个新的,但我不确定如何解决问题。谢谢!
答案 0 :(得分:3)
Hash
中无法拥有重复的密钥。
另外,为什么世界上你想要这样做?恕我直言,你现在拥有它的方式非常好。
答案 1 :(得分:2)
根据定义,哈希不能同时出现相同的密钥。你会不会喜欢数组数组?
[['key','val1'],['key','val2']]
如果是这样,并且如果每个散列键都是一个值数组,那么你可以这样做:
devalues = { a:[1,2,3], b:[4], c:[5,6] }
exploded = devalues.map{ |k,vs| ([k]*vs.length).zip(vs) }.flatten(1)
p exploded
#=> [[:a, 1], [:a, 2], [:a, 3], [:b, 4], [:c, 5], [:c, 6]]
请注意,flatten(1)
仅为Ruby 1.8.7+
修改:根据下面Nakilon的评论,这可能更简单in Ruby 1.9.2+:
exploded = devalues.flat_map{ |k,vs| ([k]*vs.length).zip(vs) }
修改:或者根据@ tokland的评论,使用Array#product
更短/更好:
exploded = devalues.flat_map{ |k,vs| [k].product(vs) }