Ruby 获取数组的拒绝计数

Ruby 获取数组的拒绝计数,ruby,Ruby,有点被拒绝吓坏了!,删除、选择、保留、等等 在打印丢失元素的计数时,删除与{}块中的条件不匹配的元素来修改数组的最短方法是什么 例如 放入“过滤掉的{(siglist.reject!{r}r[:ret]

有点被拒绝吓坏了!,删除、选择、保留、等等

在打印丢失元素的计数时,删除与{}块中的条件不匹配的元素来修改数组的最短方法是什么

例如

放入“过滤掉的{(siglist.reject!{r}r[:ret]<$retmin}).size},其:ret

似乎只打印拒绝后数组中幸存的元素数。

公认技术含量较低,但您可以通过前后数组长度的差异找到拒绝值的数量:

previous_length = siglist.size
puts "Filtered out #{previous_length - (siglist.reject!{|r| r[:ret] < $retmin }).size} whose :ret < retmin(#{$retmin})"
previous_length=siglist.size
将“筛选出的#{previous_length-(siglist.reject!{| r | r[:ret]<$retmin}).size}放入其:ret
使用非Bang方法创建新数组进行比较 我能想到的处理这个问题的最好方法是保持原始数组不变,以便进行比较。例如:

array = *(1..9)
new_array = array.reject { |i| i.odd? }
puts "Threw away #{ array.count - new_array.count } elements"
# => Threw away 5 elements
或者,可以对阵列使用集合操作。键入的时间更短,但最终结果相同:

array - new_array
# => [1, 3, 5, 7, 9]

puts "Threw away %d elements" % (array - new_array).count
# => Threw away 5 elements

换句话说,如何计算被拒绝的元素取决于您,但比较两个数组是我知道的跟踪被拒绝元素的最简单方法。

True。内联版本可以是
puts“killed:#{(a=siglist).size-(a.reject!{r|r[:ret]<$retmin}).size},因为它们很臭”
,或者可能没有
a
副本?很好-我不认为副本是必要的。我认为最初把我抛弃的是CSV类
.delete\if
,它(对我来说是偶然的)始终返回已删除元素的数组。
array - new_array
# => [1, 3, 5, 7, 9]

puts "Threw away %d elements" % (array - new_array).count
# => Threw away 5 elements