加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Sort_by Ruby,One Descending,One Ascending

发布时间:2020-12-17 03:40:57 所属栏目:百科 来源:网络整理
导读:我已经搜索了这个答案无济于事,有一个类似的问题,但答案在这种情况下不起作用,它对数字项进行排序. Similar Question -That did not work我试图使用ruby的sort_by来排序一个项目,而另一个项目以另一个升序排序.我能找到的就是其中之一. 这是代码: # Primary
我已经搜索了这个答案无济于事,有一个类似的问题,但答案在这种情况下不起作用,它对数字项进行排序. Similar Question -That did not work我试图使用ruby的sort_by来排序一个项目,而另一个项目以另一个升序排序.我能找到的就是其中之一.

这是代码:

# Primary sort Last Name Descending,with ties broken by sorting Area of interest.
people = people.sort_by { |a| [ a.last_name,a.area_interest]}

任何指导肯定会有所帮助.

样本数据:

输入

>罗素,逻辑
>欧拉,图论
>伽罗瓦,抽象代数
>高斯,数论
>图灵,算法
>伽罗瓦,逻辑

产量

>图灵,算法
>罗素,逻辑
>高斯,数论
>伽罗瓦,抽象代数
>伽罗瓦,图论

解决方法

创建一个反转< =>结果的自定义类(包括 Comparable).

使用自定义类包装要按降序排序的对象.

例:

class Descending
  include Comparable
  attr :obj

  def initialize(obj)
    @obj = obj
  end
  def <=>(other)
    return -(self.obj <=> other.obj)
  end
end

people = [
  {last_name: 'Russell',area_interest: 'Logic'},{last_name: 'Euler',area_interest: 'Graph Theory'},{last_name: 'Galois',area_interest: 'Abstract Algebra'},{last_name: 'Gauss',area_interest: 'Number Theory'},{last_name: 'Turing',area_interest: 'Algorithms'},]
puts people.sort_by {|person| [
  Descending.new(person[:last_name]),# <---------
  person[:area_interest],]}

输出:

{:last_name=>"Turing",:area_interest=>"Algorithms"}
{:last_name=>"Russell",:area_interest=>"Logic"}
{:last_name=>"Gauss",:area_interest=>"Number Theory"}
{:last_name=>"Galois",:area_interest=>"Abstract Algebra"}
{:last_name=>"Galois",:area_interest=>"Logic"}
{:last_name=>"Euler",:area_interest=>"Graph Theory"}

顺便说一句,如果你想要降序的对象是一个数值,你可以简单地使用一元运算符 – :

people.sort_by {|person| [-person.age,person.name] }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读