2013-03-26 72 views
0

有什么快捷方式(syntaxtic糖)的红宝石功能做到这一点不为零的捷径吗?是否有+ =如果{}在红宝石

# x[5] += 3 that zeroes first if x[5] does not exists 

x = {} 
x.key? 5 ? x[5] = 3 : x[5] += 3 

回答

5

尝试了这一点尺寸为:

x = Hash.new(0) 
x[5] += 3 
puts x[5] => 3 

x[5] += 3 
puts x[5] => 6 

使用Hash.new(a_value)将使散列返回该值时没有键存在:http://apidock.com/ruby/v1_9_3_392/Hash/new/class

+0

啊,这是我需要的^^感谢.. – Kokizzu 2013-03-26 19:44:20

+2

没问题,很乐意帮忙。请注意,如果您执行类似x = Hash.new([])的操作,它会为每个缺失值返回相同的数组。 – rainkinz 2013-03-26 19:46:47

3

确实有一个速记符号用于初始化,如果没有初始化。

x = {} 
x[5] ||= 0 # x[5] is 0 
x[5] += 3 # x[5] is 3 
x[5] ||= 0 # x[5] is 3 
x[5] += 3 # x[5] is 6 
0

如果它只是整数,你可以这样做:

x[5] = x[5].to_i + 3 

你可以设置一个默认值:

x=Hash.new(0) 

您可能要做到这一点这是一个更具全球性的解决方案

x[5] = (x[5] || 0) + 3