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?)