用于更新的ruby idiom或插入hashmap

时间:2015-05-06 03:59:35

标签: ruby idioms

此代码是否存在常见的ruby习语:

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

感觉可能有一个高阶函数在这里有所帮助。我希望得到像

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

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

4 个答案:

答案 0 :(得分:2)

您可以利用nil.to_i0

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

你可以写:

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

答案 3 :(得分:0)

而不是你做了什么,更好的方法是:

hashmap[key] += 1

然后你只需要这样做:

if (($_SESSION['member_type'] != 1) && ($_SESSION['member_type'] != 0)) {
        echo "<h2>You are not authorized to access this page.</h2>";
        exit();
}