2013-07-22 172 views
1

我似乎無法弄清楚這一點。如果我有兩個哈希值,其中第一哈希值應始終在第二散匹配關鍵:Ruby:用另一個散列值替換散列值

hash1 = { :table => 'name', :action => 'view' } 
hash2 = { 'name' => 'first_name', 'group' => 'user_group' } 

的關鍵:表是恆定的,但價值是動態的。我如何將hash1中的值與hash2中的值交換,其中密鑰與hash1中的值匹配?不知道實際的鍵或值將會是什麼(除了hash1中的表)?希望是有道理的,更新的hash1(或新的哈希)應該看起來像這樣:

hash1 = { :table => 'first_name', :action => 'view' } 

在此先感謝。

+0

我看不出有任何的代碼顯示你想這個自己解決。 –

回答

1
hash1.each{|k, v| hash1[k] = hash2[v] if hash2.key?(v)} 
0
hash1 = { :table => 'name', :action => 'view' } 
hash2 = { 'name' => 'first_name', 'group' => 'user_group' } 

hash2.each{|k,v| hash1[hash1.key(k)] = v if hash1.has_value? k} 
p hash1 
# >> {:table=>"first_name", :action=>"view"} 
1

我會寫(無損):

hash3 = Hash[hash1.map { |k, v| [k, hash2.fetch(v, v)] }] 
#=> {:table=>"first_name", :action=>"view"} 
+0

我不知道OP是否真的打算這樣做,但問題是要求破壞性地修改'hash1'。 – sawa

+0

@sawa請看這裏*更新的hash1(或新的散列)應該看起來* ... –

+0

你的'fetch'有什麼問題?我認爲這很好。現在,你需要假設'hash2'不包含'nil'或'falue'值。 – sawa

相關問題