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

标签 ruby sorting

假设您有一组运行者:

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/

相关文章:

javascript - 如何使用 ruby​​ on rails 中的复选框来选择行?

ruby-on-rails - 使用 Heroku 设置 Paperclip Amazon S3

javascript - 为什么这种插入排序无法对对象数组进行排序? (但可以其他值)

c# - 在 C# 中查找 map 区域的算法

ruby - 提取二维子数组(不使用矩阵)

html - 在 Rails 中导出 Pdf

python - Argsort 以相反的顺序返回负值

java - 在带有 JDBC 驱动程序的 Java 中使用准备好的语句和变量绑定(bind) Order By

c++ - 如何检查二维数组是否在 C++ 中按升序排列?

Ruby,Telnet,无超时读取多行响应