我有一个哈希
hash = {"some_wierd_name"=>"cheesemonster", .....}
我希望这个哈希为
hash = {"preferred_name"=>"cheesemonster", ......}
最短的方法是什么?
答案 0 :(得分:5)
hash["preferred_name"] = hash.delete("some_wierd_name")
哈希键是冻结的字符串,它们无法在原地进行修改,并且无法从对象中删除冻结状态。也就是说,使用prepend
和replace
的技巧无效后会导致:
RuntimeError: can't modify frozen String
因此,唯一的可能性是:删除旧值并插入新值。
答案 1 :(得分:3)
hash = {"some_wierd_name"=>"cheesemonster"}
hash["preferred_name"] = hash["some_wierd_name"]
hash.delete("some_wierd_name")
答案 2 :(得分:1)
如果我们想要替换键/值两者,可以通过使用除方法之外的rails轻松完成。您也可以使用delete方法,但一次使用一个键/值对,但除了可以删除2个或更多键/值对之外。
hash = {a: 1, b:2, c: 3}
hash.except!(:a)[:d] = 4
and it is similar to these two following line
hash.except!(:a)
hash[:d] = 4
hash = {:b=>2, :c=>3, :d=>4}
仅更改哈希的键,值保持不变。人们也可以使用拒绝。 reject和delete_if是相同的。
hash[:e] = hash.delete(:d)
or
temp = hash[d]
hash.delete_if{|key| key ==:d }
hash[:e] = temp
hash = {:b=>2, :c=>3, :e=>4}
仅更改值,键保持不变。这个很容易。
hash[:e] = 5
参考文献:
答案 3 :(得分:0)
对于单个密钥,请使用delete
hash["preferred_name"] = hash.delete("some_wierd_name")
如果您需要更新所有密钥,我建议使用inject
new_hash = hash.inject({}) do |returned_hash, (key, value)|
returned_hash[key] = value.upcase;
returned_hash
end