我无法找到将某些值转换为另一个键的最佳方法。每个值大多数都转到下一个键,并且需要完全删除最后一个键的值。例如
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] }
我的想法是重命名哈希键,但不确定这是否是最好的方法。
答案 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}}
它不是很优雅,可能有一个更好的解决方案,但它是一个起点。