countではなくlength/sizeが良いらしい
def bench(msg) t = Time.now 30000.times do yield end puts "#{msg}:\t#{Time.now - t}s" end arrs = (0...100).to_a.map do |i| Array.new(rand(100)) end bench("count") do arrs.each { |a| a.count } end bench("length") do arrs.each { |a| a.length } end
$ ruby -v ruby 2.6.1p33 (2019-01-30 revision 66950) [x86_64-darwin18] $ ruby count.rb count: 0.14144s length: 0.101015s
countは本来、引数と同値の要素を数えるメソッドで、長さを返すためのメソッドではないので、lengthより遅いらしい。とは言っても神経質になるほどの差ではないと思う。