我想我的游戏由GAME_DATE排序,但有时GAME_DATE可能是空的,我会得到一个异常:未定义的方法`to_datetime”的零:NilClass在ruby/rails中,如何对日期值进行排序,日期有时可能为空?
@games = @teams.reduce([]) { |memo, team| memo + team.games }.sort_by(&:game_date)
这样做的有什么好办法吗?
我想我的游戏由GAME_DATE排序,但有时GAME_DATE可能是空的,我会得到一个异常:未定义的方法`to_datetime”的零:NilClass在ruby/rails中,如何对日期值进行排序,日期有时可能为空?
@games = @teams.reduce([]) { |memo, team| memo + team.games }.sort_by(&:game_date)
这样做的有什么好办法吗?
如果你只是想删除的条目没有日期,最简单的办法 -
ar.select(&:date).sort_by(&:date)
末增加尼尔斯可以
ar.select(&:date).sort_by(&:date) + ar.reject(&:date)
如果你碰巧知道可能日期的范围内进行,你可以用类似
ar.sort_by{|e| e.date || Date.new(9999)}
BTW,减少你的语句可以改为(恕我直言)更清晰
@games = @teams.map(&:games).flatten
一个简单的方法是将拆分您的阵列到那些nil
S和那些没有,然后根据需要在非空的一半进行排序,并将它们粘贴在一起:
parts = a.partition { |o| o.date.nil? }
sorted = parts.last.sort_by(&:date) + parts.first
这种方法将与任何方法(即不只是与date
),它应该足够快。
我的答案一步到位。并保持所有的价值。 – CantGetANick 2012-01-05 06:52:47
@CantGetANick:这种方法也不会丢失任何值,我不确定你的意思。它也可以。 – 2012-01-05 07:07:48
这增加了一个额外的步骤。 – CantGetANick 2012-01-05 07:41:30
谢谢。如果我不想放弃他们,但只是把它们放在最后呢? – Kamilski81 2012-01-05 06:23:33
检查我的答案。 – CantGetANick 2012-01-05 06:53:56
你说得对。 :) – CantGetANick 2012-01-05 08:00:45