Skip over iteration in Enumerable#collect
问题 (1..4).collect do |x| next if x == 3 x + 1 end # => [2, 3, nil, 5] # desired => [2, 3, 5] If the condition for next is met, collect puts nil in the array, whereas what I'm trying to do is put no element in the returned array if the condition is met. Is this possible without calling delete_if { |x| x == nil } on the returned array? (Using Ruby 1.8.7; my code excerpt is heavily abstracted) 回答1: There is method Enumerable#reject which serves just the purpose: (1..4).reject{|x| x == 3}.collect{|x