0
假設我有兩個散列設置。 'defaults'散列在啓動時被初始化,'settings'散列在數據庫中被保留。並非所有的設置都有默認設置,並且並非所有的設置都被保留在第一次啓動時,意味着這些散列可能有不同的鍵。我需要製作3散列「all_settings」,這將有這兩個的所有鍵值,設置鍵值覆蓋默認的,如果兩者都存在:使用邏輯謂詞從兩個不同大小的散列做散列
all_settings[key] = settings[key] || defaults[key]
我已經成功做到這一點的
all_settings = {}
defaults.each{|name, value| all_settings[name] = settings[name] || defaults[name]}
settings.each{|name, value| all_settings[name] = settings[name] || defaults[name]}
但我覺得它有點笨。有沒有辦法使用更短和更精確的語法來做同樣的事情?
@Zach有你的問題的答案,其中'設置'確定兩個哈希共享密鑰時的值。更一般地說(但不是爲了你的問題),'merge'可以採取'h1.merge(h2){| k,v1,v2 | ''。如果'h1'和'h2'都有鍵'k','v1 = h1 [k]'和'v2 = h2 [k]',塊返回的值將成爲鍵'k'的值在合併散列。 –