解决此类问题的一个更通用的解决方案是完全避免嵌套数组并使用类来代替。然后,您可以为该类定义 <=> 运算符,让您可以访问 Comparable mixin (http://ruby-doc.org/core/classes/Comparable.html) 中的所有函数,为您提供 <, <= 、==、>= 和 > 运算符和方法 'between?'
这只是一个示例,在现实生活中,您将使用描述它们存储内容的类:
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 方式”,而不是嵌套数据结构,其逻辑依赖于数组中的位置。一开始需要做更多的工作,但从长远来看,你会发现它会好得多。
Ruby 是一种非常面向对象的编程语言,并提供了非常强大的工具供您使用。我强烈建议您阅读诸如“The Ruby Programming Language”或“The Ruby Way”之类的书,以正确了解该语言的强大功能。