2017-01-24 1 views
0

Ich möchte jeden Wert jedes Array eines Hashs durchlaufen. Normalerweise wird ein Wert in einem Array zu wählen, würde ich dies tun:Ruby: Wählen Sie einen Wert in einem Array in einem Hash

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

Aber wie ich durch das Array iterieren, wenn es in einem Hash ist?

Dies ist mein Code:

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 

Und dies ist die Logik, was ich aber nicht funktionieren gefunden:

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 

Antwort

1

Lösung

Blöcke in Hash#each Iterierte mit zwei Variablen (|key,value|) und Blöcke in Array#each durchlaufen mit einer Variablen (|element|).

Da Sie Hashes und Arrays verschachtelt haben, müssen Sie each mehrfach mit unterschiedlichen Variablennamen anwenden. puts mit Vertiefung verwendet, besser die Struktur zu zeigen:

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 

Es gibt

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

Ihr Code

Hier ist der Code mit der geringsten Menge an Änderungen:

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 

Beachten Sie, dass hash[key1] eigentlichist 69232310 und hash[key1][key2] ist value2.

Verwandte Themen