max
повторяет все элементы, возвращаемые значениями, и каждый элемент является самим массивом. Это то, чего вам не хватает.
> hash_example.values
# => [["dog", "brown", 3], ["cat", "orange", 2]]
max
не возвращает значение, с которым вы сравниваете, а возвращает элемент, который удовлетворяет сравнению. Что это означает на практике? Вот «рабочая» версия вашего скрипта
> hash_example.values.max{|a,b| a[2]<=>b[2] }
# => ["dog", "brown", 3]
Как видите, возвращаемое значение является полным элементом, а не элементом, использованным для сравнения. Если вам нужен только третий элемент, вы должны использовать inject
.
> hash_example.values.inject(0) {|t,i| i[2] > t ? i[2] : t }
# => 3