你如何在ruby中对多种类型进行排序?

hof*_*ffm 2 ruby sorting

假设您有一组跑步者:

runners = [al, betty, chris, debby]
Run Code Online (Sandbox Code Playgroud)

而且你有一个方法time可以在比赛中返回跑步者的时间.

time方法总是返回一个浮点数的情况下,我知道您可以使用sort_by以下方法对运行者进行排序:

runners.sort_by do |runner|
    runner.time
end
Run Code Online (Sandbox Code Playgroud)

但是,假设time有时返回一个字符串,比方说"disqualified".在那种情况下,你会如何按时间对跑步者进行排序,不合格的跑步者会持续多久?如果你想让不合格的跑步者先或在其他位置怎么办?

Pet*_*ter 5

这是一个简单的方法.在数组中只有两个排序字段,Ruby将按第一个标准排序,然后按第二个标准排序.

runners.sort_by do |runner|
    [(runner.time == 'disqualified') ? 1 : 0, runner.time]
end
Run Code Online (Sandbox Code Playgroud)

1将在之后进行排序0,因此不合格的时间将持续到最后.