1

我似乎无法弄清楚这一点。如果我有两个散列,其中第一个散列中的值应始终与第二个散列中的键匹配:

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

键 :table 是常量,但值是动态的。如何将 hash1 中的值与 hash2 中的值交换,其中键与 hash1 中的值匹配?不知道实际的键或值是什么(hash1 中的 :table 除外)?希望这是有道理的,更新后的 hash1(或新的 hash)应该是这样的:

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

提前致谢。

4

3 回答 3

1
hash1.each{|k, v| hash1[k] = hash2[v] if hash2.key?(v)}
于 2013-07-22T13:46:26.630 回答
1

我会写(非破坏性的):

hash3 = Hash[hash1.map { |k, v| [k, hash2.fetch(v, v)] }]
#=> {:table=>"first_name", :action=>"view"}
于 2013-07-22T14:00:01.310 回答
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"}
于 2013-07-22T13:49:14.067 回答