2012-06-19 42 views

回答

7

事情是這樣的順序:

a = [1, nil, 2, '', 3] 
a.reject{|x| x == '' || x.nil?} # => [1, 2, 3] 
+1

-0.5,在問題的OP引用'compact',所以'select/reject'是要走的路,而不是破壞性的'delete_if'。 – tokland

+1

糟糕,它確實具有破壞性。當然,那應該是「拒絕」的! –

+0

+0.5 ;-)是的,聽着這個詞,「刪除」,你可以感受到它的聲音有多麼糟糕的破壞性。 – tokland

3

做的類似的方式它Sergio的:

irb(main):006:0> a = [1,nil,2,'']     => [1, nil, 2, ""] 
irb(main):007:0> a.reject!{|x| x.nil? || x == ''} => [1, 2] 
+0

爲什麼'拒絕!'如果OP引用'compact',而不是'compact!' – tokland

3

我知道這對Rails的標籤沒有註釋,但你應該使用框架下,最好的解決方案恕我直言是:

a = [1, nil, 2, '', 3] 
a.select(&:present?) 
#=> [1, 2, 3] 

在Ruby明文我與Sergio's answera.select { |x| x.empty? || x.nil? }去,如果數組只能包含String S和nil秒。