什麼是交換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'的鍵,還要轉換它們正在進行中。 –