有点害怕被拒绝!,delete_if,select,keep_if等等。
http://www.ruby-doc.org/core-1.9.3/Array.html#method-i-reject
修改数组的最短方法是删除与{}块中的条件不匹配的元素,同时打印那些丢失的元素的数量?
例如
puts "Filtered out #{(siglist.reject!{|r| r[:ret] < $retmin }).size} whose :ret < retmin(#{$retmin})"
似乎只会在拒绝后打印数组中幸存的元素的数量。
答案 0 :(得分:2)
不可否认,低技术,但您可以通过前后阵列长度的差异找到被拒绝值的数量:
previous_length = siglist.size
puts "Filtered out #{previous_length - (siglist.reject!{|r| r[:ret] < $retmin }).size} whose :ret < retmin(#{$retmin})"
答案 1 :(得分:1)
我能想到解决这个问题的最好方法是保留原始数组以进行比较。例如:
array = *(1..9)
new_array = array.reject { |i| i.odd? }
puts "Threw away #{ array.count - new_array.count } elements"
# => Threw away 5 elements
或者,您可以在阵列上使用set操作。键入的时间较短,但最终结果是相同的:
array - new_array
# => [1, 3, 5, 7, 9]
puts "Threw away %d elements" % (array - new_array).count
# => Threw away 5 elements
换句话说,如何计算被拒绝的元素取决于您,但比较两个数组是我知道跟踪被拒绝元素的最简单方法。