Ruby 使用 .reject 从数组中删除 nil 值



我有一个数组:

scores = [1, 2, 3, "", 4]

我想删除所有空白值。但是当我运行这个时:

puts scores.reject(&:empty?)

我收到一个错误:

undefined method `empty' for 1:Fixnum

如何在一步过程中从数组中删除不是整数的值?我正在使用Ruby 1.9.3。

只拒绝nil将是:

array.compact

如果要删除空白值,则应使用blank?:(需要Rails/ActiveSupport)

scores.reject(&:blank?)
#=> [1, 2, 3, 4]

""" "falsenil[]{}为空白。

它就像:

scores.grep(Integer)

请注意,如果您计划映射值,则可以在以下之后的块中执行此操作:

scores.grep(Integer){|x| x+1 }

如果你想做同样的事情,但你的数字是字符串,奖金:

scores.grep(/d+/){|x|x.to_i}

试试这个:

scores.select{|e| e.is_a? Integer}
# => [1, 2, 3, 4]

如果你真的只需要拒绝nil,那么可以这样做:

scores.reject(&:nil?)
scores = [1, 2, 3, "", 4, nil]
scores.reject{|s| s.to_s == ''}
# => [1, 2, 3, 4]

这对我有用

scores.reject!{|x| x.to_s.empty?}
scores.select{|score| score.is_a? Fixnum}

或者,由于 Fixnum 继承自 Integer,您也可以选择

scores.select{|score| score.is_a? Integer)

。如果这似乎更具描述性。

数组和枚举倾向于提供许多执行相同操作的方法。

&:empty?适用于哈希、数组和字符串,但不适用于数字。拒绝中使用的方法必须对列表中的所有项目都有效。 出于这个原因,&:blank?可以正常工作。

最新更新