Это кажется немного неправильным, для наиболее часто используемых случаев (Array
, Hash
, String
), size
и length
являются либо псевдонимами, либо реализованы одинаково (вы можете прочитать больше здесь или проверьте реализацию каждого метода) и будет работать в O(1)
.
count
однако:
- Для
Hash
не переопределенои отступит до Enumerable#count
, что означает, что его сложность будет O(n)
, так как все значения ключа будут пройдены. - Для
Array
оно переопределено (Array#count
) и, по крайней мере, он проверит количество приведенных аргументов, что не нужно ни Array#size
, ни Array#length
. - для
String
используется для подсчета подстрок.
В целом, я бы сказал, что
Предпочитают size
или length
над count
по соображениям производительности.
будет более точным.