我有一个数组:
scores = [1, 2, 3, "", 4]
我想删除所有空白值。但是当我运行时:
puts scores.reject(&:empty?)
我收到错误:
undefined method `empty' for 1:Fixnum
如何在一步过程中从数组中删除非整数的值?我使用的是Ruby 1.9.3。
答案 0 :(得分:43)
仅拒绝nil
将是:
array.compact
答案 1 :(得分:20)
如果要删除空白值,则应使用blank?
:(需要Rails / ActiveSupport)
scores.reject(&:blank?)
#=> [1, 2, 3, 4]
""
," "
,false
,nil
,[]
和{}
为空。
答案 2 :(得分:18)
这很简单:
scores.grep(Integer)
请注意,如果您计划映射值,则可以在以下块中执行此操作:
scores.grep(Integer){|x| x+1 }
奖金如果你想做同样的事情,但你的数字是字符串:
scores.grep(/\d+/){|x|x.to_i}
答案 3 :(得分:2)
试试这个:
scores.select{|e| e.is_a? Integer}
# => [1, 2, 3, 4]
答案 4 :(得分:2)
如果你真的只需要拒绝nil
,那么就可以这样做:
scores.reject(&:nil?)
答案 5 :(得分:1)
scores = [1, 2, 3, "", 4, nil]
scores.reject{|s| s.to_s == ''}
# => [1, 2, 3, 4]
答案 6 :(得分:1)
这为我工作
scores.reject!{|x| x.to_s.empty?}
答案 7 :(得分:0)
scores.select{|score| score.is_a? Fixnum}
或者,由于Fixnum继承自Integer,您也可以选择
scores.select{|score| score.is_a? Integer)
......如果这看起来更具描述性。
Array和Enumerable倾向于提供许多方法来做同样的事情。
答案 8 :(得分:0)
&:empty?
适用于哈希,数组和字符串,但不适用于数字。您在拒绝中使用的方法必须对列表中的所有项有效。 &:blank?
因此而工作正常。