我有一个具有任意数量参数的函数。我的功能如下:

sum(n, *rest)

如何遍历数组rest,以便它检查参数是否为Fixnum,如果为,则对其求和,否则不执行任何操作?例如:
sum(5,1,2,k,D,3)
# => 6

最佳答案

另一种方式(尽管我更喜欢@arup使用grep):

a.group_by(&:class)[Fixnum].reduce(0,:+)

a = [1, :cat, 3, 'dog']
b = a.group_by(&:class) #=> {Fixnum=>[1,3],Symbol=>[:cat],String=>["dog"]}
c = b[Fixnum]           #=> [1,3]
reduce(0,:+)            #=> 4

我假设如果数组不包含fixnum,则返回零。在这种情况下,如果要返回nil,则将reduce(0,:+)更改为reduce(:+)

关于ruby - 计数Ruby数组中的Fixnums,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22170017/

10-09 16:15