我有帖子對象的集合,我希望能夠基於這些條件對它們進行排序:排序由多個條件在Ruby中
- 首先,按類別(新聞,事件,實驗室,組合報告等內容。)
- 然後按日期,如果日期,或位置,如果一個特定的指數定爲它
有些職位有日期(新聞事件),其他人將有明確的職務(實驗室,和投資組合)。
我想打電話給posts.sort!
,所以我重寫了<=>
,但我正在尋找這些條件排序的最有效方法。下面是一個僞方法:
def <=>(other)
# first, everything is sorted into
# smaller chunks by category
self.category <=> other.category
# then, per category, by date or position
if self.date and other.date
self.date <=> other.date
else
self.position <=> other.position
end
end
好像我不得不實際上排序兩個獨立的時代,而不是填鴨式的一切到一個方法。像sort_by_category
,然後sort!
。什麼是最寶貴的方式來做到這一點?
謝謝,我不知道的'數字#非零?'。 '''方法返回非布爾值是不是有點奇怪? – 2010-04-14 06:58:16
@Mladen:這是,但非常有用。另一個你可能期望得到'true/false'的例子:'String
2010-04-14 13:53:36
這是有點誤導: 'post_ary.sort_by {| a,b | (a.category <=> ...)}' sort_by不帶有兩個參數的塊。對於更復雜的排序問題,您應該返回一個數組。 [a.category,a.date,a.position]}' – Timo 2012-03-27 12:50:05