2012-11-19 92 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"} 
相关问题