2012-01-05 16 views

回答

21

如果你只是想删除的条目没有日期,最简单的办法 -

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 
+0

谢谢。如果我不想放弃他们,但只是把它们放在最后呢? – Kamilski81 2012-01-05 06:23:33

+0

检查我的答案。 – CantGetANick 2012-01-05 06:53:56

+0

你说得对。 :) – CantGetANick 2012-01-05 08:00:45

3

一个简单的方法是将拆分您的阵列到那些nil S和那些没有,然后根据需要在非空的一半进行排序,并将它们粘贴在一起:

parts = a.partition { |o| o.date.nil? } 
sorted = parts.last.sort_by(&:date) + parts.first 

这种方法将与任何方法(即不只是与date),它应该足够快。

+0

我的答案一步到位。并保持所有的价值。 – CantGetANick 2012-01-05 06:52:47

+2

@CantGetANick:这种方法也不会丢失任何值,我不确定你的意思。它也可以。 – 2012-01-05 07:07:48

+0

这增加了一个额外的步骤。 – CantGetANick 2012-01-05 07:41:30

相关问题