Ruby-如何构建多值哈希?

这是我的代码片段:

something_1.each do |i| something_2.each do |j| Data.each do |data| date = data.attribute('TIME_PERIOD').text value = data.attribute('OBS_VALUE').text date_value_hash[date] = value end end end 

我想捕获一个日期中的所有值。 date是我的哈希的关键,它可能有一个日期的多个值。 我怎么能在这里完成呢? 当我使用这一行时:

 date_value_hash[date] = value 

每次循环迭代时,值都会被替换。 但是,我想在每个日期累积date_value_hash中的所有值,即我想动态构建值。

目前我得到这个:

 {"1990"=>"1", "1994"=>"2", "1998"=>"0"} 

但是,我想要这样的事情:

 {"1990"=>"1,2,3,4,5,6", "1994"=>"1,2,3,4,5,6", "1998"=>"1,2,3,4,5,6"} 

任何人都知道如何实现这一目标?

像这样

 magic = Hash.new{|h,k|h[k]=[]} magic["1990"] << "A" magic["1990"] << "B" magic["1994"] << "C" magic["1998"] << "D" magic["1994"] << "F" 

之后magic就是

 {"1998"=>["D"], "1994"=>["C", "F"], "1990"=>["A", "B"]} 

如果您需要将值作为逗号分隔的字符串(如示例数据所示),您只需将其作为

 magic['1990'].join(',') 

产量

 "A,B" 

如果以后你想传递magic并阻止它自动创建键,只需将其包装如下

 hash = Hash.new.update(magic) 

希望有所帮助!

在Ruby中构建多值哈希的另一种方法:

 h = {} (h[:key] ||= []) << "value 1" (h[:key] ||= []) << "value 2" puts h