2016-04-26 13 views
1

我有一個看起來像這樣的哈希:紅寶石 - 遍歷一個哈希包含key /陣列值對,並通過每個值迭代

{ 
    "key1": [ 
    "value1", 
    "value2", 
    "value3" 
    ], 
    "key2": [ 
    "value1", 
    "value2", 
    "value3", 
    "value4", 
    "value5" 
    ], 
    "key3": [ 
    "value1" 
    ], 
    "key4": [ 
    "value1", 
    "value2" 
    ] 
} 

如何通過各種keyN迭代,同時還通過所有循環該鍵中的值?

我有一個數組與所有的關鍵,如果有幫助。

感謝

+0

的可能的複製[如何在Ruby中迭代散列?](http://stackoverflow.com/questions/1227571/how-to-iterate-over-a-hash-in-ruby) – Hamms

回答

2

很簡單,真正做到:

hash.each do |name, values| 
    values.each do |value| 
    # ... 
    end 
end 

你可以做任何你想要的namevalue在最低水平。

+0

確實很簡單 - 正在以錯誤的方式看待它。謝謝 – user6127511

+0

一旦你掌握了它,你會發現這種模式適用於各種情況。 '.each'是大多數Ruby應用程序的支柱。 – tadman

2

你可以這樣說:

hash.each do |key, array| 
    array.each do |value| 
    # do something 
    end 
end 
1
hash.each do |key_N, values_N| 
    values_N.each so |values| 
    . 
    . 
    #YourCode 
    . 
    . 
    end 
end 
+0

像'keyN'這樣的名字應該是'key_n'來遵循Ruby約定。大寫字母具有重要意義,特別是當涉及到'CONSTANT_NAMES'和'ClassNames'時。 – tadman

+0

@tadman謝謝你指出。我已經更新了我的答案。 –

+0

到達那裏。一般來說資本都是用變量名完全避免的,它只是混淆了事物。 – tadman

0

如果您確定有關數組的大小,只需你可以這樣做,

ha = {:a => [1,2]} 

ha.each do |k, (v1, v2)| 
    p k 
    p v1 
    p v2 
end 

Output 
:a 
1 
2