我似乎无法想出这个。如果我有两个哈希值,那么第一个哈希值中的值应始终与第二个哈希值中的键匹配:
hash1 = { :table => 'name', :action => 'view' }
hash2 = { 'name' => 'first_name', 'group' => 'user_group' }
关键:table是常量,但值是动态的。如何将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)}
答案 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"}