2017-01-24 21 views
0

を置く:ルビー:私は配列のハッシュのハッシュを持っている変数の値と名前

hash = Hash.new do |hash, key| 
    hash[key] = Hash.new do |hash, key| 
     hash[key] = Array.new 
    end 
end 

私も3つの変数の値を取得するループを持っている:

author = gets.chomp 
file = gets.chomp 
time = Time.now 

これらの3つの変数私のハッシュの3世代に対応します:authorは第1世代の変数で、ハッシュと同じです。 fileは第2世代の変数であり、配列に等しい。時間は第3世代の変数であり、単純な値に等しい。

これは私がハッシュに値を代入することを目的とする方法である:

hash[author][file] = file 
hash[author][file].push(time) 

私の問題は、私は著者とハッシュ内のファイルを実装したい場合、私は第二世代を破壊することを考えるということですハッシュや配列や設定の代わりに単純な値に等しい変数:

hash[author][file] = file  #here, instead of adding a new key in the 2nd generation hash, I replace the hash with a single value. 
hash[author][file].push(time) #the "file" variable isn't an array anymore, it is a string, so I can't push anything in it. 

私はそれがキーになって、ハッシュに値をプッシュするような何かを行うことができますか?

CODE:

hash = {1 => {"a1" => ["un", "uno"], "a2" => ["uunn", "uunnoo"]}, 2 => {"b1" => ["deux", "dos"], "b2" => ["ddeuxx", "ddooss"]}} 

hash.each do |key, value| 
    puts key 
    value.each do |key, value| 
     puts key 
     value.each do |value| 
      puts value 
     end 
    end 
end 

結果:むしろ、その後

1 
a1 
un 
uno 
a2 
uunn 
uunnoo 
2 
b1 
deux 
dos 
b2 
ddeuxx 
ddooss 
+0

ご入力データがどのように見えるんなりましょう:あなたは、キーの値として文字列を設定することができますか?値をハッシュに「プッシュ」しないで、値を割り当てます。 – tadman

+0

投稿に追加します – nounoursnoir

+0

これは、カスタムクラスまたはStructの良い候補のようです。ハッシュや配列のようなプリミティブを使用する複雑なデータ構造は、今や頭痛のレシピであり、後の大きな頭痛です。 – moveson

答えて

1

ここで文字列に値を設定

ない場合は、どのように私は私にこの結果を与えるだろう何かを持つことができます:

hash[author][file] = file 
hash[author][file][:file] = file 

をそして配列が別のプロパティ

hash[author][file][:times] ||= [] 
hash[author][file][:times].push time 
+0

私はこのことを理解していると思いますが、それは何も持たない変数、または既に持っている変数の値を作成するものです。つまり、ハッシュキーが1ではなく2(またはそれ以上)の値を持つことができます。私は正しい?そうでなければ、私はあなたの全体のコメントを理解していません。 奇妙なことに、私は盲目的に|| =を使用しようとしました...そして、私のコードは何とか完全に機能しました!私はそれが働くために何が起こったのか分からなかった。 – nounoursnoir

+0

'hash [author] [file]'が空のハッシュの場合、 '[:times]'にアクセスするとnilになります。 '|| ='は、現在定義されていない場合は_onlyに、またはfalseの場合は_onlyに設定します。配列に格納した要素を削除せずに '|| = 'を何度も呼び出すことができます。ここでのキーは、ネストされたデータ構造です。 –

関連する問題