ruby中的自定义排序方法

我想通过评估两个属性来指定一个自定义块方法来对ruby中的对象数组进行排序。 然而,在Google中进行了多次搜索后,如果没有运算符,我就没有任何示例。

这就是我想要做的:比较a和b:

if ax less than bx return -1 if ax greater than bx return 1 if ax equals bx, then compare by another property , like ay vs by 

这是我的代码(ruby中的noob,对不起),它不起作用……

 ar.sort! do |a,b| if ax  bx return 1 else return ay  by end 

这个块在一个函数内,所以返回正在退出函数并返回-1 …我会感谢任何帮助。

亲切的问候。

用案例陈述:

 ar.sort do |a, b| case when ax < bx -1 when ax > bx 1 else ay <=> by end end 

三元:

 ar.sort { |a,b| ax < bx ? -1 : (ax > bx ? 1 : (ay <=> by)) } 

这将为您提供x的升序,然后是y:

 points.sort_by{ |p| [px, py] } 

这似乎有效:

 # Ascending ar.sort! do |a,b| (ab).abs() > 0 ? ab : 0 end # Descending ar.sort! do |a,b| (ab).abs() > 0 ? ba : 0 end 

没有太空船操作员( <=> ) – 它在Ruby中似乎是多余的(在语法效率方面),因为Ruby认为0是真的,并且对于这种用法(上面),你可以放三元运算符中的显式0