2

被reject!、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})"  

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

4

2 回答 2

2

诚然,技术含量很低,但您可以通过前后数组长度的差异来找到被拒绝值的数量:

previous_length = siglist.size
puts "Filtered out #{previous_length - (siglist.reject!{|r| r[:ret] < $retmin }).size} whose :ret < retmin(#{$retmin})"
于 2012-08-14T22:34:11.737 回答
1

使用非 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

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

于 2012-08-14T22:48:06.300 回答