我正在处理由字符串组成的一堆数组,很多时候我会写 .delete_if { |str| str.empty? }
我知道我可以自己将此方法添加到数组类中,但我希望有一种内置的方法可以在不向基类添加非标准方法的情况下完成。虽然将方法添加到基类很有趣,但出于可维护性的原因,我不想这样做。
是否有内置的方法来处理这个问题?
有一个简短的形式
array.delete_if(&:empty?)
array.compact.delete_if(&:empty?)
可以在纯 Ruby 中处理 nil 和空白。 - scarver2 1.9.3p194 :001 > ["", "A", "B", "C", ""].reject(&:empty?)
=> `["A", "B", "C"]`
compact
方法。好的,有一个Array.delete方法。它返回被删除的内容(如果没有被删除则返回nil),但是这种方式感觉有些笨拙。不过它确实可以实现功能,并且不会因为非字符串元素而出错。
ar = ['a', '', 2, 3, '']
p ar.delete('') #=> ""
p ar #=> ["a", 2, 3]
array.delete(element); array
。 - fl00r你可以做到这个
ar = ['a', '', 2, 3, '']
ar = ar.select{|a| a != ""}
如果你也想移除 nil:
arr = ['',"",nil,323]
arr.map!{|x|x==''?nil:x}.compact!
=> [323]
映射、三元运算符、紧凑
.compact_blank
,它正是你所要求的:[1, "", nil, 2, " ", [], {}, false, true, 3].compact_blank
# => [1, 2, true, 3]
它也适用于哈希表,删除具有空白值的键值对。
对于简单的解决方法:
my_array = ['a', '', 2, 3, '']
compact_array = my_array.select(&:present?)
# => ["a", 2, 3]
这里:
我们只选择 Ruby 认为存在的数组项,而 nil
和 ""
不被认为是存在的吗?在 Ruby 中。
.present?
是 Rails 的一个方法。 - John Coote
compact!
方法可以使用 :) - fl00r