繁体   English   中英

计算Ruby数组中的Fixnums

[英]Count Fixnums in Ruby array

我有一个具有任意数量参数的函数。 我的功能看起来像这样:

sum(n, *rest)

如何遍历数组rest以便检查参数是否为Fixnum ,如果是,则将其求和,否则不执行任何操作? 例如:

sum(5,1,2,k,D,3)
# => 6

请执行以下操作:

ary = rest.grep(Fixnum)
# return the summation of the array elements, if array is not empty
# 0, when array is empty or contains only one element as `0`.
ary.reduce(0,:+) 

#reducegrep

例子 :

ary = [1,"2",{1 => 2 },8]
ary.grep(Fixnum).inject(0,:+) # => 9
ary = ["2",{1 => 2 },(1..2)]
ary.grep(Fixnum).inject(0,:+) # => 0

# counting the how many Fixnums are there
ary = [1,"2",{1 => 2 },8]
ary.grep(Fixnum).size # => 2

另一种方式(虽然我更喜欢@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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM