Answers:
有很多方法可以做到这一点,一种是 reject
noEmptyCities = cities.reject { |c| c.empty? }
您也可以使用reject!,它将cities在适当位置进行修改。它要么返回cities作为它的返回值,如果它拒绝的东西,或者nil如果没有拒绝制成。如果您不小心的话,这可能是一个陷阱(感谢ninja08在评论中指出了这一点)。
cities.reject!(&:blank?)呢?empty?用于阵列
blank?仅可通过访问ActiveSupport。标准Ruby确实使用String#empty?:ruby-doc.org/core-1.9.3/String.html#method-i-empty-3F
reject好过reject!,因为[].reject!(&:empty?)回报率nil,[].reject(&:empty?)回报[]
这对我有用:
[1, "", 2, "hello", nil].reject(&:blank?)
输出:
[1, 2, "hello"]
:blank?特定于Rails时遇到的麻烦。
NoMethodError: undefined method empty? for nil:NilClass,:blank? 优于:empty?
:blank效果比:empty。因为:empty不适用于nil
当我想整理这样的数组时,我使用:
["Kathmandu", "Pokhara", "", "Dharan", "Butwal"] - ["", nil]
这将删除所有空白或零元素。
cities.delete_if(&:blank?)
这将同时删除nil值和空字符串("")值。
例如:
cities = ["Kathmandu", "Pokhara", "", "Dharan", "Butwal", nil]
cities.delete_if(&:blank?)
# => ["Kathmandu", "Pokhara", "Dharan", "Butwal"]
尝试这个:
puts ["Kathmandu", "Pokhara", "", "Dharan", "Butwal"] - [""]
用途reject:
>> cities = ["Kathmandu", "Pokhara", "", "Dharan", "Butwal"].reject{ |e| e.empty? }
=> ["Kathmandu", "Pokhara", "Dharan", "Butwal"]
reject(&:empty?)。
nil.empty?break!
reject(&:empty?)加上compact例如[nil, ''].compact.reject(&:empty?)
cities.reject! { |c| c.blank? }
您要使用blank?over 的原因empty?是,空格可以识别nil,空字符串和空格。例如:
cities = ["Kathmandu", "Pokhara", " ", nil, "", "Dharan", "Butwal"].reject { |c| c.blank? }
仍会返回:
["Kathmandu", "Pokhara", "Dharan", "Butwal"]
并呼吁empty?对" "将返回false,这你可能想true。
注意:blank?仅可通过Rails访问,Ruby仅支持empty?。
已经有了很多答案,但是如果您在Rails世界中,这是另一种方法:
cities = ["Kathmandu", "Pokhara", "", "Dharan", "Butwal"].select &:present?
present?来自ActiveSupport。这没有no Rails标记,一种方法需要额外的gem似乎过多。
这是实现此目的的另一种方法
我们可以使用presence与select
cities = ["Kathmandu", "Pokhara", "", "Dharan", nil, "Butwal"]
cities.select(&:presence)
["Kathmandu", "Pokhara", "Dharan", "Butwal"]
" "我的数组中有一些元素没有被拒绝方法删除。您的方法已删除nil ""或" "项目。
cities = ["Kathmandu", "Pokhara", "", "Dharan", "Butwal"].delete_if {|c| c.empty? }
cities.reject!(&:empty?)