Ruby:用另一个哈希值替换哈希值

时间:2013-07-22 13:37:49

标签: ruby hash

我似乎无法想出这个。如果我有两个哈希值,那么第一个哈希值中的值应始终与第二个哈希值中的键匹配:

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

关键:table是常量,但值是动态的。如何将hash1中的值与hash2中的值交换,其中键与hash1中的值匹配?不知道实际的键或值是什么(除了:hash1中的表)?希望有意义,更新的hash1(或新哈希)应如下所示:

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

提前致谢。

3 个答案:

答案 0 :(得分:1)

hash1.each{|k, v| hash1[k] = hash2[v] if hash2.key?(v)}

答案 1 :(得分:1)

我写(非破坏性):

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

答案 2 :(得分: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"}