我需要从数组中选择满足某些条件的元素,并计算它所采用的迭代次数。例如:
array = [1,2,3,4,5...1,000,000]
count = 0
array.keep_if { |x| x % 2 == 0 }
我想在每次满足条件x % 2 == 0
时增加计数器。有没有办法说出发生了多少次迭代?
答案 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的真实条件数放入