我真的很想在没有猴子修补的情况下处理这个问题,但我还没有找到另一种选择.
我有一个数组(在Ruby中),我需要按多个条件排序.我知道如何使用排序方法,我已经使用了一个选项数组排序的技巧,以排序多个条件.但是,在这种情况下,我需要第一个条件来升序,第二个条件降序排序.例如:
ordered_list = [[1, 2], [1, 1], [2, 1]]
Run Code Online (Sandbox Code Playgroud)
有什么建议?
编辑:刚才意识到我应该提到我不能轻易比较第一个和第二个值(我实际上是在这里处理对象属性).所以对于一个简单的例子,它更像是:
ordered_list = [[1, "b"], [1, "a"], [2, "a"]]
Run Code Online (Sandbox Code Playgroud)
Bri*_*ips 33
怎么样:
ordered_list = [[1, "b"], [1, "a"], [2, "a"]]
ordered_list.sort! do |a,b|
[a[0],b[1]] <=> [b[0], a[1]]
end
小智 8
我正在做一个噩梦,试图找出如何反转特定属性的排序,但通常对其他两个进行排序.只是关于那些在此之后出现并且被| a,b |混淆的排序的注释 块语法.您不能使用或使用{|a,b| a.blah <=> b.blah}
块样式.它必须与或一起使用.此外,如前所述,其他海报交换并跨越比较运算符以反转排序顺序.像这样:sort_by!
sort_by
sort!
sort
a
b
<=>
要通过blah和craw正常排序,但按相反的顺序按蓝色排序,请执行以下操作:
something.sort!{|a,b| [a.blah, b.bleu, a.craw] <=> [b.blah, a.bleu, b.craw]}
Run Code Online (Sandbox Code Playgroud)
也可以使用-
标志sort_by
或sort_by!
做在数字反向排序(据我所知它仅适用于数字,所以不要用字符串作为它只是错误的尝试,并杀死页).
假设a.craw
是一个整数.例如:
something.sort_by!{|a| [a.blah, -a.craw, a.bleu]}
Run Code Online (Sandbox Code Playgroud)