2

これが私のコードスニペットです:

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

1つの日付ですべての値をキャプチャしたいと思います。日付は私のハッシュのキーであり、単一の日付に対して複数の値を持つ場合があります。どうすればここでそれを達成できますか?この行を使用している場合:

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"} 

誰かが私がそれをどのように達成できるか考えていますか?

4

2 に答える 2

5

このような

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)

それが役立つことを願っています!

于 2012-12-11T00:17:14.390 に答える
2

Ruby で多値ハッシュを構築する別のアプローチ:

h = {}
(h[:key] ||= []) << "value 1"
(h[:key] ||= []) << "value 2"
puts h 
于 2014-10-10T02:49:54.117 に答える