ruby 用于更新或插入哈希图的习惯用法

ruby idiom for update or insert a hashmap

这段代码有没有通用的ruby习语:

if hashmap.has_key?(key)
    hashmap[key] += 1
else
    hashmap[key] = 1
end

感觉这里可能有一个高阶函数可以提供帮助。我希望有类似

的东西
hashmap[key].insertOrUpdate { 1 }, {|value| value += 1}

编辑: 虽然@Santhosh 的回答很酷并且适用于我的特定示例,但我对一般情况更感兴趣。我认为@sawa 的回答提供了最大的灵活性,因为传入的代码块允许复杂的逻辑,如散列的散列等...

你可以这样写:

hashmap = {}
key = 'cat'
hashmap[key] = (hashmap[key] || 0) + 1 #=> 1
hashmap[key] = (hashmap[key] || 0) + 1 #=> 2

而不是你所做的,更好的方法是:

hashmap = Hash.new{|h, k| h[k] = 0}

那你只需要做:

hashmap[key] += 1

您可以利用 nil.to_i0

这一事实
hashmap[key] = hashmap[key].to_i + 1

您可以使用fetch提供默认值:

hashmap[key] = hashmap.fetch(key, 0) + 1