假设您有一组跑步者:
runners = [al, betty, chris, debby]
您有一个方法time
,它返回跑步者在比赛中的时间。
在time
方法总是返回浮点数的情况下,我知道您可以使用sort_by
按三次对Runner进行排序,如下所示:
runners.sort_by do |runner|
runner.time
end
但是,假设time
有时返回一个字符串,比如"disqualified"
。在这种情况下,你会如何根据时间对参赛者进行排序,被取消参赛资格的选手排在最后?如果你想让被取消参赛资格的选手先跑,或者换个位置呢?
5条答案
按热度按时间oknrviil1#
这里有一个简单的方法。一个数组中只有两个排序字段,Ruby将按第一个条件排序,然后按第二个条件排序。
在这里,
1
将在0
之后排序,因此取消资格的时间将排在最后。isr3a4wc2#
您可以为以下内容创建自定义类:
igetnqfo3#
时间会返回
Object.time.to_f
吗?如果是这样的话,对字符串调用to_f将返回0.0。如果没有,请尝试在块中调用runner.time.to_f。字符串类型的所有时间值都将为0.0。jtw3ybtb4#
你可以这样做:
在Ruby<1.9中没有
Float::INFINITY
,但您可以通过执行Inf = 1.0 / 0
来获得它。ebdffaop5#
假设您是来自数据库的跑步者,使用单独的字段/方法检查不合格的跑步者允许您将排序逻辑推送到数据库层,这将比将所有记录加载到内存中并使用Ruby对它们进行排序更快。