我有一个数组:
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]
""
、" "
、false
、nil
、[]
和{}
为空白。
它就像:
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?
可以正常工作。