如何将哈希值中的值转换为另一个键

时间:2016-05-24 18:47:10

标签: ruby hash

我无法找到将某些值转换为另一个键的最佳方法。每个值大多数都转到下一个键,并且需要完全删除最后一个键的值。例如

hash1 = { a: [1, 2, 3], b: [4, 5, 6], c: [7, 8, 9] }

desired_hash = hash1.some_method

desired_hash === { a: [], b: [1, 2, 3], c: [4, 5, 6] }

我的想法是重命名哈希键,但不确定这是否是最好的方法。

3 个答案:

答案 0 :(得分:5)

hash1 = { a: [1, 2, 3], b: [4, 5, 6], c: [7, 8, 9] }
keys = hash1.keys
=> [:a, :b, :c]
values = hash1.values
=> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

keys.zip(values.unshift([])).to_h
=> {:a=>[], :b=>[1, 2, 3], :c=>[4, 5, 6]}

答案 1 :(得分:1)

pv = []
hash1.each_with_object({}) do |(k,v),h|
  h[k] = pv
  pv = v
end
  #=> {:a=>[], :b=>[1, 2, 3], :c=>[4, 5, 6]}    

答案 2 :(得分:0)

假设哈希键已经“按正确的顺序”。 你可以试试这个:

{{1}}

它不是很优雅,可能有一个更好的解决方案,但它是一个起点。