数组 – 根据某些元素中可能为零的属性对数组进行排序
发布时间: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] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |