假设您有一组运行者:
runners = [al, betty, chris, debby]
并且您有一个方法 time
可以返回运行者在比赛中的时间。
在 time
方法总是返回 float 的情况下,我知道您可以使用 sort_by
按时间对运行者进行排序,如下所示:
runners.sort_by do |runner|
runner.time
end
但是,假设 time
有时会返回一个字符串,比如 "disqualified"
。在那种情况下,您将如何按时间对参赛者进行排序,不合格的参赛者排在最后?如果您想让被取消资格的运行者排在第一位或其他位置怎么办?
最佳答案
这是一个简单的方法。只要在数组中有两个排序字段,Ruby 就会按第一个条件排序,然后按第二个条件排序。
runners.sort_by do |runner|
[(runner.time == 'disqualified') ? 1 : 0, runner.time]
end
这里1
会排在0
之后,所以不合格的次数排在最后。
关于ruby - 你如何在 ruby 中对多种类型进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6968414/