2017-01-24 4 views
0

ハッシュの各配列の各値を繰り返し処理します。Ruby:配列内の値をハッシュで選択します。

array = ["1", "2"] 
array.each do |x| puts x end 

をしかし、それはハッシュである場合、私は、配列を反復処理します方法:通常、配列の値を選択するために、私はこれを行うだろうか?

これは私のコードです:

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

hash.each do |key, key2, value| 
    puts key 
    hash[key].each do |key, value| 
     puts key 
     #insert here the code to iterate through the array 
    end 
end 

そして、これは私が見つかりましたが、それは動作しません。ほとんどのロジックものです:

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

hash.each do |key, key2, value| 
    puts key 
    hash[key].each do |key, value| 
     puts key 
     hash[key][value].each do |value| 
      puts value 
     end 
    end 
end 

答えて

1

ソリューション

Hash#each反復で

ブロックと2つの変数(|key,value|)、およびArray#eachのブロックは、1つの変数(|element|)で繰り返します。

ネストされたハッシュと配列があるので、異なる変数名を使用してeachを複数回適用する必要があります。 putsは、より良い構造を表示するには、インデントで使用されています

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

hash.each do |id, sub_hash| 
    puts id 
    sub_hash.each do |key, sub_array| 
    puts " #{key}" 
    sub_array.each do |word| 
     puts " #{word}" 
    end 
    end 
end 

それは

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

あなたのコード

出力ここでの修正量が最も少ないあなたのコードです:

hash.each do |key1, value1| 
    puts key1 
    hash[key1].each do |key2, value2| 
     puts key2 
     hash[key1][key2].each do |value| 
      puts value 
     end 
    end 
end 

hash[key1]は実際にはです、およびhash[key1][key2]は、value2です。

関連する問題