对于空元素,有一个等价的Array#compact吗?

时间:2013-06-20 02:39:49

标签: ruby-on-rails ruby

众所周知,Array#compact会从数组中删除nil个元素。

array.reject { |element| element.empty? }

会删除[]之类的空元素(在rails中你也可以#blank?删除空元素 nil元素。)

是否有一种简便方法可以删除Array#compact之类的空/空元素?或者正在使用Array#reject我最好的选择?

我还没有看到"空的"相当于#compact,如果有的话。但也许我只是忽视它。

3 个答案:

答案 0 :(得分:26)

是的!

array.reject &:empty?

但是,正如scarver2Hoang Le所述,如果数组包含nil,则会因NoMethodError而失败。


如果您使用的是RailsActive Support,则可以安全地写下:

array.reject &:blank?

由于所有对象都回复blank?including nil

,因此不会出现错误

根据mu is too short的建议,还有另一种方法可以做到这一点:

array.select &:present?

似乎present?是根据blank?实施的,因此两者都是合适的。

答案 1 :(得分:1)

从 Rails 6.1.3.1 开始,您有 compact_blank

array = ["", "a", nil]
array.compact_blank
#=> ["a"]

正如它在 Enumerable 上定义的那样,您也可以在散列上使用它。

答案 2 :(得分:0)

截至今天,Rails 6.1 现在支持 compact_blank

Docs