是否有更短的方法来更改密钥的值?
my_array.each do |x|
if my_hash.key?(x)
my_hash[x] += 1
else
my_hash[x] = 1
end
end
答案 0 :(得分:1)
稍短一些:
my_array.each do |x|
my_hash[x] ||= 0
my_hash[x] += 1
end
答案 1 :(得分:1)
在您的特定情况下,最简单的方法是给哈希值一个默认值:
my_hash = Hash.new(1)
=> {}
my_hash[:x]
=> 1
my_hash[:y] += 1
=> 2
请注意,这只有在默认值是不可变的情况下才有意义,否则引用将在所有键之间共享。
答案 2 :(得分:0)
您可以使用三元运算符在一行上写下您的语句。
my_array.each {|x| my_hash.key?(x) ? my_hash[x].next : my_hash[x] = 1}
如果您将值增加1,也可以使用下一步方法。