2012-11-19 216 views
3

給定兩個散列,我試圖用第二個散列也具有的鍵替換第一個散列中的值。具體而言,我有這兩個散列:根據另一個散列中的值替換散列值

data = { 
    "study"  => "Lucid Study", 
    "name"  => "Lucid Plan", 
    "studyWillBe" => "Combination" 
} 

conditions = { "study" => "((current))" } 

我想data有其"study"關鍵更新,因爲conditions有這把鑰匙。我想data落得這樣的:

data = { 
    "study"  => "((current))", 
    "name"  => "Lucid Plan", 
    "studyWillBe" => "Combination" 
} 

我能走到今天:

data = Hash[data.map {|k, v| [conditions[k] || k, v] }] 

,但是這並不完全這樣做的伎倆。任何人都可以將我指向正確的方向嗎?

回答

4

你可以做到這一點

data.each {|k, v| data[k] = conditions[k] if conditions[k]}

+0

這是完美的,不正是我需要的。非常感謝您的快速響應。 –

2

這就是所謂的merge

data = {"study"=>"Lucid Study", "name"=>"Lucid Plan", "studyWillBe"=>"Combination"} 
conditions = {"study"=>"((current))"} 

data.merge(conditions) 
#{"study"=>"((current))", "name"=>"Lucid Plan", "studyWillBe"=>"Combination"} 
+0

當'conditions'有一個'data'沒有的鍵時,這會給出錯誤的結果。 – sawa

2

的方法合併可以採取塊,你可以做一些具體的操作不僅賦予新的價值

data.merge(conditions) do |key, oldvalue, newvalue| 
    newvalue 
end  
=> {"study"=>"((current))", "name"=>"Lucid Plan", "studyWillBe"=>"Combination"} 
相關問題