Ruby-如何构建多值哈希?

K M*_*lam 2 ruby hash

这是我的代码片段:

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
Run Code Online (Sandbox Code Playgroud)

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

date_value_hash[date] = value
Run Code Online (Sandbox Code Playgroud)

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

目前我得到这个:

{"1990"=>"1", "1994"=>"2", "1998"=>"0"}
Run Code Online (Sandbox Code Playgroud)

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

{"1990"=>"1,2,3,4,5,6", "1994"=>"1,2,3,4,5,6", "1998"=>"1,2,3,4,5,6"} 
Run Code Online (Sandbox Code Playgroud)

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

aku*_*uhn 5

像这样

magic = Hash.new{|h,k|h[k]=[]}
magic["1990"] << "A"
magic["1990"] << "B"
magic["1994"] << "C"
magic["1998"] << "D"
magic["1994"] << "F"
Run Code Online (Sandbox Code Playgroud)

之后magic是

{"1998"=>["D"], "1994"=>["C", "F"], "1990"=>["A", "B"]}
Run Code Online (Sandbox Code Playgroud)

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

magic['1990'].join(',')
Run Code Online (Sandbox Code Playgroud)

产量

"A,B"
Run Code Online (Sandbox Code Playgroud)

如果以后要传递magic并阻止它自动创建密钥,只需将其包装如下

hash = Hash.new.update(magic)
Run Code Online (Sandbox Code Playgroud)

希望有所帮助!