对可枚举对象执行迭代计数

时间:2015-01-24 07:11:20

标签: ruby

我需要从数组中选择满足某些条件的元素,并计算它所采用的迭代次数。例如:

array = [1,2,3,4,5...1,000,000]
count = 0
array.keep_if { |x| x % 2 == 0 }

我想在每次满足条件x % 2 == 0时增加计数器。有没有办法说出发生了多少次迭代?

3 个答案:

答案 0 :(得分:1)

我认为这应该按预期工作。

array.keep_if { |x|
    keep = (x % 2 == 0 ? true : false)
    count = count + 1 if keep
    keep
}

答案 1 :(得分:0)

出于好奇,您是否不会在结果上致电Array#size

array.reduce([0, []]) { |memo, el| 
  next memo unless el % 2 == 0
  memo[0] += 1
  memo.last << el
  memo 
}
#⇒ [
#  [0] 500,
#  [1] [ ... ] # the filtered result
#]

答案 2 :(得分:0)

我会选择一个更简单的解决方案。您寻找的count将与结果数组的长度相等。因此,您可以使用经典的select方法,然后计算结果。

array = (1..1000000).to_a
[res = array.select {|x| x % 2 == 0}, count = res.length]

将简化的数组放入res,并将count的真实条件数放入