使用hash2值交换hash1键

时间:2016-04-14 12:14:16

标签: ruby-on-rails ruby

使用h1值交换h2密钥的最短途径是什么:

h1 = {a: 1, b:2, c:3}
h2 = {a: 'a1', b: 'b1'}

这是我想在交换后得到的结果:

h1 = {a1: 1, b1: 2, c:3}

4 个答案:

答案 0 :(得分:3)

怎么样:

h1 = h1.map{|key, val| [h2.fetch(key,key).to_sym, val]}.to_h

答案 1 :(得分:2)

apply(column_sums, 2, which.max)
#[1] 2 2

您也可以使用h1 = {a: 1, b:2, c:3} h2 = {a: 'a1', b: 'b1'} Hash[h1.map { |k, v| [(h2[k] || k).to_sym ,v] }] # returns {:a1=>1, :b1=>2, :c=>3} 代替.to_h

Hash[]

答案 2 :(得分:0)

h1 = {a: 1, b:2, c:3}
h2 = {a: 'a1', b: 'b1'}
h1 = h1.inject({}){ |h, (k, v)| h2.has_key?(k) ? h[h2[k].to_sym] = v : h[k] = v; h }
#=>  {:a1=>1, :b1=>2, :c=>3}

答案 3 :(得分:0)

以防万一,实时哈希的解决方案:

result = Hash.new { |hash, k| h1[h2.key(k) || k] }

现在可以扩展 h1h2,但结果将反映新的添加(不是已经解决的密钥的更改)。

要使用预先存在的h1h2来实例化此哈希,需要执行以下操作:

(h2.values | (h1.keys - h2.keys)).map { |k| [k, result[k]] }.to_h

More info