Rubyの配列の長さはcountではなくlength/sizeで取得する

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より遅いらしい。とは言っても神経質になるほどの差ではないと思う。