在Ruby Hash的开头插入元素?

时间:2013-12-24 10:00:59

标签: ruby hash

我有一个用例,我有一个现有的哈希:

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]

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