我知道 Rails 在 ActiveRecord 中内置了排序方法,但我只是在编写一个普通的 ruby 脚本,并且很想按日期对数组中的记录进行排序。
日期将存储在多维数组的单元之一中。
对我来说,解决这个问题的最佳方法是什么,所以我可以达到我刚刚做的地步,sort_by_date
我指出要么ASC
要么DESC
?
我不必使用方法sort_by_date
,但我的想法是我希望能够轻松地调用集合上的方法并获得我想要的结果。
想法?
我知道 Rails 在 ActiveRecord 中内置了排序方法,但我只是在编写一个普通的 ruby 脚本,并且很想按日期对数组中的记录进行排序。
日期将存储在多维数组的单元之一中。
对我来说,解决这个问题的最佳方法是什么,所以我可以达到我刚刚做的地步,sort_by_date
我指出要么ASC
要么DESC
?
我不必使用方法sort_by_date
,但我的想法是我希望能够轻松地调用集合上的方法并获得我想要的结果。
想法?
def sort_by_date(dates, direction="ASC")
sorted = dates.sort
sorted.reverse! if direction == "DESC"
sorted
end
像这样的东西?
class Array
def sort_by_date(direction="ASC")
if direction == "ASC"
self.sort
elsif direction == "DESC"
self.sort {|a,b| b <=> a}
else
raise "Invalid direction. Specify either ASC or DESC."
end
end
end
多维数组只是数组的数组,所以在要排序的“维度”上调用此方法。
我现在这样做的方式是:
@collection.sort! { |a,b| DateTime.parse(a['date']) <=> DateTime.parse(b['date']) }
并与!运算符我正在影响同一个变量(否则我将需要另一个变量来保存修改后的变量)。到目前为止,它是一种魅力。
以下可能不适用于 Date 对象,但应该适用于 DateTime 对象。这是因为 DateTime 对象可以转换为整数。
我最近不得不对 DateTime 对象进行降序排序,这就是我想出的。
def sort_by_datetime(dates, direction="ASC")
dates.sort_by { |date| direction == "DESC" ? -date.to_i : date }
end
我正在使用旧版本的 Rails,rabl
它对我有用
collection @name_of_your_collection.sort! { |a,b| DateTime.parse(a['start_at']) <=> DateTime.parse(b['start_at']) }
node do |s|
# lots of attributes
s
end