Rails,ruby,如何sorting一个数组?
在我的Rails应用程序中,我创build了一个数组,像这样:
@messages.each do |message| @list << { :id => message.id, :title => message.title, :time_ago => message.replies.first.created_at } end
做完这个数组后,我想然后按time_ago ASC顺序sorting,这是可能的吗?
@list.sort_by{|e| e[:time_ago]}
它默认为ASC,但是如果你想要DESC,你可以这样做:
@list.sort_by{|e| -e[:time_ago]}
也似乎你正在试图从@messages
build立名单。 你可以简单地做:
@list = @messages.map{|m| {:id => m.id, :title => m.title, :time_ago => m.replies.first.created_at } }
你可以这样做:
@list.sort {|a, b| a[:time_ago] <=> b[:time_ago]}
你也可以做@list.sort_by { |message| message.time_ago }
@list.sort_by { |message| message.time_ago }
只是供参考,我没有看到移动消息到一个新的列表,然后sorting他们的观点。 只要它是ActiveRecord它应该直接查询数据库在我看来。
看起来你应该可以这样做:
@messages = Message.includes(:replies).order("replies.created_at ASC")
除非我误解了目的,否则这应该就够了。
在铁轨4 +
@list.sort_by(&:time_ago)
是的,你可以使用group_by:
http://api.rubyonrails.org/classes/Enumerable.html#method-i-group_by