如何在Ruby中合并两个哈希而不覆盖重复键?

Cla*_*esi 135 ruby

是否有一种简单或优雅的方法来合并两个哈希而不会覆盖重复的键?

也就是说,如果密钥存在于原始哈希中,我不想更改其值.

Ale*_*ner 220

如果你有两个散列,optionsdefaults和要合并defaultsoptions而不覆盖现有的密钥,你真正想要做的是相反的:合并optionsdefaults:

options = defaults.merge(options)
Run Code Online (Sandbox Code Playgroud)

或者,如果您使用Rails,您可以:

options.reverse_merge!(defaults)
Run Code Online (Sandbox Code Playgroud)

  • 由于 Rails 5.1 中的安全问题,他们正在弃用 `reverse_merge!` (2认同)

uji*_*fgc 17

标准Ruby库中有一种方法可以合并Hashes而不覆盖现有值或重新分配哈希值.

important_hash.merge!(defaults) { |key, important, default| important }
Run Code Online (Sandbox Code Playgroud)