清除数组中的空字符串

时间:2011-04-25 21:11:31

标签: ruby arrays

我正在处理一堆由字符串组成的数组,很多次我都写过.delete_if { |str| str.empty? }

现在,我知道我可以自己将这个方法添加到数组类中,但是我希望有一种内置的方法来实现这一点,而不需要在基类中添加非标准方法。与向基类添加方法一样有趣的是,出于可维护性的原因,我不想这样做。

是否有内置方法来处理这个问题?

8 个答案:

答案 0 :(得分:36)

有一个简短的表格

array.delete_if(&:empty?)

答案 1 :(得分:6)

您可以使用此方法:

    1.9.3p194 :001 > ["", "A", "B", "C", ""].reject(&:empty?)
    => `["A", "B", "C"]`

请注意,如果您只需要清除nils中的数组,则可以使用compact方法。

答案 2 :(得分:5)

嗯,有 Array.delete 。它会返回已删除的内容(如果没有删除则返回nil)但是,这会感觉很笨拙。但它确实在非字符串元素上传递并且不会失败:

ar = ['a', '', 2, 3, '']
p ar.delete('')  #=> ""
p ar             #=> ["a", 2, 3]

答案 3 :(得分:1)

你可以这样做

ar = ['a', '', 2, 3, '']
ar = ar.select{|a| a != ""}

我希望这对你有用

答案 4 :(得分:0)

你可以使用.select!但是你仍然会遇到同样的问题。

您可以改为创建实用程序类,而不是修改数组。

答案 5 :(得分:0)

您可以尝试以下解决方案。我希望它会帮助你。

array = [“”,“”,nil,nil,2,3] array.delete_if(&:blank?)=> [2,3]

答案 6 :(得分:0)

如果您还想删除nil:

arr = ['',"",nil,323]
arr.map!{|x|x==''?nil:x}.compact!

=> [323]

Map,三元运算符,compact

答案 7 :(得分:0)

简单,请解决以下问题:

my_array = ['a', '', 2, 3, '']
compact_array = my_array.select(&:present?)
# => ["a", 2, 3]

这里:

我们只选择红宝石认为存在的数组项 nil""不存在?在红宝石中