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

数组 – 根据某些元素中可能为零的属性对数组进行排序

发布时间:2020-12-16 19:53:20 所属栏目:百科 来源:网络整理
导读:我有一个对象数组 [#a star=1 val=1,#a star=nil val=3,#a star=2 val=2] 我需要按时间排序的数组,然后按val排序 [ #a star=2 val=2,#a star=1 val=1,#a star=nil val=3 ] 但是使用sort_by会抛出一个错误,因为时间是零. 我现在使用一种丑陋的方式来排序,但我
我有一个对象数组
[<#a star=1  val=1>,<#a star=nil val=3>,<#a star=2  val=2>]

我需要按时间排序的数组,然后按val排序

[ <#a star=2  val=2>,<#a star=1  val=1>,<#a star=nil val=3> ]

但是使用sort_by会抛出一个错误,因为时间是零.

我现在使用一种丑陋的方式来排序,但我确定有一个很好的方法去做

starred=[]
@answers.each {|a| (starred << a) if a.starred }
@answers=@answers-starred
starred=starred.sort_by {|a| a.starred }.reverse
@answers=starred+@answers

解决方法

starred.sort_by { |a| [a ? 1 : 0,a] }

当它必须比较两个元素时,它比较一个数组.当Ruby比较数组(调用===方法)时,它比较第一个元素,只有当第1个元素相等时才转到第2个元素. ? 1:0保证,我们将Fixnum作为第一个元素,所以应该没有错误.

如果你这样做? 0:1,nil将出现在数组的末尾,而不是开始.
这是一个例子:

irb> [2,5,1,nil,7,3,4,6].sort_by { |i| [i ? 1 : 0,i] }
=> [nil,2,6,7]

irb> [2,6].sort_by { |i| [i ? 0 : 1,i] }
=> [1,nil]

(编辑:李大同)

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

    推荐文章
      热点阅读