使用 nil 值和多个参数对 ruby 数组进行降序排序
Sort ruby array in descending order with nil values and multiple arguments
首先,我找到了用可能的 nil 值对值进行排序的帖子,其他帖子对值进行降序排序,但我都没有找到解决方案。
我在这里:
@records = @records.to_a.sort_by do |r| [-r.optimized_all_count, [r.year ? 1 : 0, r.year]] end
这很好用,但我希望“年”比较器降序。我测试了这个:
-[r.year ? 1 : 0, r.year]
但符号“-”不适用于 nil 值。我也试过 a.reverse
...
如何获取降序的年份参数(并保持 -r.optimized_all_count
作为第一个排序参数),理想情况下:
2020, 2018, 2017...nil, nil, nil.
谢谢
试试这个:
@records = @records.to_a.sort_by do |r| [-r.optimized_all_count, [r.year ? 0 : 1, r.year ? -r.year : nil]] end
@records.to_a.sort_by { |r| [-r.optimized_all_count, -(r.year || -Float::INFINITY)] }
不清楚是否需要 .to_a
。
首先,我找到了用可能的 nil 值对值进行排序的帖子,其他帖子对值进行降序排序,但我都没有找到解决方案。
我在这里:
@records = @records.to_a.sort_by do |r| [-r.optimized_all_count, [r.year ? 1 : 0, r.year]] end
这很好用,但我希望“年”比较器降序。我测试了这个:
-[r.year ? 1 : 0, r.year]
但符号“-”不适用于 nil 值。我也试过 a.reverse
...
如何获取降序的年份参数(并保持 -r.optimized_all_count
作为第一个排序参数),理想情况下:
2020, 2018, 2017...nil, nil, nil.
谢谢
试试这个:
@records = @records.to_a.sort_by do |r| [-r.optimized_all_count, [r.year ? 0 : 1, r.year ? -r.year : nil]] end
@records.to_a.sort_by { |r| [-r.optimized_all_count, -(r.year || -Float::INFINITY)] }
不清楚是否需要 .to_a
。