2017-01-24 7 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 반복 처리에

블록 두 변수 (|key,value|) 및 Array#each의 블록은 하나의 변수 (|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입니다.

관련 문제