什么是交换h1
键与h2
值的最短途径:与HASH2交换HASH1键的值
h1 = {a: 1, b:2, c:3}
h2 = {a: 'a1', b: 'b1'}
这是我想要的交换后有结果:
h1 = {a1: 1, b1: 2, c:3}
什么是交换h1
键与h2
值的最短途径:与HASH2交换HASH1键的值
h1 = {a: 1, b:2, c:3}
h2 = {a: 'a1', b: 'b1'}
这是我想要的交换后有结果:
h1 = {a1: 1, b1: 2, c:3}
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[]
h1.map { |k, v| [(h2[k] || k).to_sym ,v] }.to_h
# returns {:a1=>1, :b1=>2, :c=>3}
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}
以防万一,现场哈希的解决方案:
result = Hash.new { |hash, k| h1[h2.key(k) || k] }
现在人们可能延长都h1
和h2
,结果将反映新的增加(不是已经处理的键中的改变,但是)。
实例化这个哈希与先前存在的h1
和h2
,一个需要执行类似:
(h2.values | (h1.keys - h2.keys)).map { |k| [k, result[k]] }.to_h
'h2'中的值是'String's,结果中的键是'Symbol's,所以你不只是用'h2'的值交换'h1'的键,还要转换它们正在进行中。 –