我有一组Post对象,希望能按照以下条件进行排序:
- 首先按照分类(新闻、事件、实验室、作品集等)排序
- 然后按照日期排序,如果有日期;如果设置了特定索引,则按照位置排序
一些文章会有日期(新闻和事件),而其他文章则会有明确的位置(实验室和作品集)。
我想要调用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!
。那么最Ruby的方式是什么?
Numeric#nonzero?
。一个返回非布尔值的?
方法是不是有点奇怪? - Mladen JablanovićString < Fixnum
返回的是nil
,而不是false
。 - Marc-André Lafortunepost_ary.sort_by {|a, b| (a.category <=> ...) }
sort_by不接受带有两个参数的块。相反,对于更复杂的排序问题,您应该返回一个数组.. 即:post_ary.sort_by {|a| [a.category, a.date, a.position] }
- Timononzero?
和最后一个||
可以被移除。 - Marc-André Lafortune