23

私は配列を持っています:

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

そして、空白の値をすべて削除したいと思います。しかし、これを実行すると:

puts scores.reject(&:empty?)

エラーが発生します:

undefined method `empty' for 1:Fixnum

ワンステッププロセスで配列から整数ではない値を削除するにはどうすればよいですか? Ruby 1.9.3 を使用しています。

4

9 に答える 9

20

空白の値を削除したい場合は、次を使用する必要がありますblank?: (Rails / ActiveSupport が必要)

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

""" "falsenil[]、および{}は空白です。

于 2013-10-17T15:09:04.530 に答える
18

次のように簡単です。

scores.grep(Integer)

値をマッピングする予定がある場合は、次のブロックで行うことができます。

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

同じことをしたいが、数字が文字列である場合のボーナス:

scores.grep(/\d+/){|x|x.to_i}
于 2013-10-17T15:08:18.617 に答える
2

これを試して :

scores.select{|e| e.is_a? Integer}
# => [1, 2, 3, 4]
于 2013-10-17T15:01:23.437 に答える
1
scores = [1, 2, 3, "", 4, nil]
scores.reject{|s| s.to_s == ''}
# => [1, 2, 3, 4]
于 2013-10-17T15:09:36.153 に答える
1

これは私のために働いた

scores.reject!{|x| x.to_s.empty?}
于 2014-05-05T06:39:32.830 に答える
0
scores.select{|score| score.is_a? Fixnum}

または、Fixnum は Integer から継承するため、次のオプションを選択することもできます

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

...それがより説明的だと思われる場合。

Array と Enumerable は、同じことを行う多くの方法を提供する傾向があります。

于 2013-10-17T15:19:47.287 に答える