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

Lui*_*igi 22 ruby arrays

我有一个数组:

scores = [1, 2, 3, "", 4]
Run Code Online (Sandbox Code Playgroud)

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

puts scores.reject(&:empty?)
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

undefined method `empty' for 1:Fixnum
Run Code Online (Sandbox Code Playgroud)

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

小智 44

拒绝只会nil:

array.compact


Ste*_*fan 20

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

scores.reject(&:blank?)
#=> [1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

""," ",false,nil,[],和{}都是空白.

  • +1,但这只适用于Rails和/或ActiveSupport. (2认同)

hir*_*lau 18

它很简单:

scores.grep(Integer)
Run Code Online (Sandbox Code Playgroud)

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

scores.grep(Integer){|x| x+1 }
Run Code Online (Sandbox Code Playgroud)

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

scores.grep(/\d+/){|x|x.to_i}
Run Code Online (Sandbox Code Playgroud)