使用 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