我有一个数组:
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?}
&:empty?
适用于哈希、数组和字符串,但不适用于数字。您在拒绝中使用的方法必须对列表中的所有项目都有效。&:blank?
因此会正常工作。
scores.select{|score| score.is_a? Fixnum}
或者,由于 Fixnum 从 Integer 继承,您也可以使用
scores.select{|score| score.is_a? Integer)
...如果这看起来更具描述性。
Array 和 Enumerable 倾向于提供许多方法来做同样的事情。