当前位置:  开发笔记 > 编程语言 > 正文

如何根据不同订单的多个条件进行排序?

如何解决《如何根据不同订单的多个条件进行排序?》经验,为你挑选了2个好方法。



1> Brian Philli..:

怎么样:


ordered_list = [[1, "b"], [1, "a"], [2, "a"]]
ordered_list.sort! do |a,b|
  [a[0],b[1]] <=> [b[0], a[1]]
end


我发现`a [0] <=> b [0]或b [1] <=> a [1]`更具可读性.
@maasha我认为`或`在这里不起作用,因为`<=>`在相等时返回'0`而'0`不在'false`中.所以`1 <=> 1或1 <=> 2`返回`0`但是`[1,1] <=> [1,2]`返回`-1`.

2> 小智..:

我正在做一个噩梦,试图找出如何反转特定属性的排序,但通常对其他两个进行排序.只是关于那些在此之后出现并且被| a,b |混淆的排序的注释 块语法.您不能使用或使用{|a,b| a.blah <=> b.blah}块样式.它必须与或一起使用.此外,如前所述,其他海报交换并跨越比较运算符以反转排序顺序.像这样:sort_by!sort_bysort!sortab<=>

要通过blah和craw正常排序,但按相反的顺序按蓝色排序,请执行以下操作:

something.sort!{|a,b| [a.blah, b.bleu, a.craw] <=> [b.blah, a.bleu, b.craw]}

也可以使用-标志sort_bysort_by!做在数字反向排序(据我所知它仅适用于数字,所以不要用字符串作为它只是错误的尝试,并杀死页).

假设a.craw是一个整数.例如:

something.sort_by!{|a| [a.blah, -a.craw, a.bleu]}

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有