[英]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,:+)
例子 :
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.