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
。