Более общее решение таких проблем состоит в том, чтобы полностью избегать вложенных массивов и использовать вместо них класс. Затем вы можете определить оператор <=> для этого класса, предоставляя вам доступ ко всем функциям в Comparable mixin (http://ruby -doc.org / core / classes / Comparable.html) дает вам <, <=, = =,> = и> операторы и метод 'Между?'
Это всего лишь пример, в реальной жизни вы бы использовали классы, которые описывают то, что они хранят:
class Duo
include Comparable
def initialize( a, b )
@a = a
@b = b
end
def <=>(rhs)
@b <=> rhs.b
end
end
Если у вас есть массив объектов Duo, вы можете использовать функции min, max и sort без определения оператора сравнения. Итак ...
@a = Duo.new( 1, 10 )
@b = Duo.new( 2, 5 )
@c = Duo.new( 3, 1 )
[ @a, @b, @c ].sort
вернет массив [@c, @b, @a]
И
[@a, @b, @c].max
вернется @a
Это гораздо больше "Ruby Way", чем вложенные структуры данных с логикой, которая опирается на позиции в массивах. На старте требуется немного больше работы, но в долгосрочной перспективе это будет намного лучше.
Ruby является очень объектно-ориентированным языком программирования и предоставляет вам очень мощные инструменты. Я настоятельно рекомендую прочитать книгу типа «Язык программирования Ruby» или «The Ruby Way», чтобы получить полное представление о возможностях языка.