我有一个用例,我有一个现有的哈希:
response = { aa: 'aaa', bb: 'bbb' }
我需要添加id
作为其中一个键。
当我使用response.merge(id: 'some_id')
然后将其转换为JSON时,我将id
作为最后一个元素,这是我不想要的。
我想在id: 'some_id'
的开头插入response
。
我试过这个,但迭代它感觉不太好:
new_response = { id: 'some id' }
response.keys.reverse.each {|key| new_response[key] = response[key] }
基本上,我需要类似Ruby Array's unshift
的功能。
irb(main):042:0> arr = [1, 2, 3]
=> [1, 2, 3]
irb(main):043:0> arr.unshift(5)
=> [5, 1, 2, 3]
答案 0 :(得分:27)
response = {aa: 'aaa', bb: 'bbb'}
new_response = {new: 'new_value'}.merge(response)
# => {:new=>"new_value", :aa=>"aaa", :bb=>"bbb"}
答案 1 :(得分:2)
尝试将其转换为数组并返回:
Hash[hash.to_a.unshift([k, v])]
答案 2 :(得分:0)
我认为你可以这样做:
response.inject({:new=>"new_value"}) { |h,(k,v)| h[k]=v; h }
或者喜欢@sawa