将值添加到hash和mutate的前面

时间:2017-05-22 12:30:13

标签: ruby hash mutation

我想在哈希的前面添加一个值,我希望哈希变异。

像这样:

def put!(q,v)
  q = {:value => v, :next => q}
end

但这不起作用,因为我无法为此分配q这样的新值。

我该怎么做?

提前感谢所有答案。

2 个答案:

答案 0 :(得分:0)

我假设:next键在修改之前应该具有哈希的图像。你可以这样做......

def put!(q,v)
  q[:value], q[:next] = v, q.dup
end

哈希引用为q将被改变,因此对哈希的其他引用将反映该更改。

答案 1 :(得分:0)

我不知道你为什么要这样做,但是这里有一种方法可以预先设置一个键和一个键。值对你的哈希值:

hash = {b: 2, c: 3}
hash_copy = hash.dup
hash.clear
hash[:a] = 1
hash_copy.each do |k,v|
  hash[k] = v
end
p hash
# {:a=>1, :b=>2, :c=>3}

这很慢,有点无用:你需要复制哈希,删除所有键,添加一对,并将所有对都放回去。

通常的做法是不关心订单:

hash = {b: 2, c: 3}
hash[:a] = 1
p hash
# {:b=>2, :c=>3, :a=>1}