Rails, Ruby, как отсортировать массив?
в моем приложении rails Я создаю такой массив:
@messages.each do |message|
@list << {
:id => message.id,
:title => message.title,
:time_ago => message.replies.first.created_at
}
end
После создания этого массива я хотел бы отсортировать его по порядку по времени ASC, возможно ли это?
Ответы
Ответ 1
@list.sort_by{|e| e[:time_ago]}
по умолчанию используется ASC, однако если вы хотите DESC вы можете сделать:
@list.sort_by{|e| -e[:time_ago]}
Также кажется, что вы пытаетесь создать список из @messages
. Вы можете просто сделать:
@list = @messages.map{|m|
{:id => m.id, :title => m.title, :time_ago => m.replies.first.created_at }
}
Ответ 2
Вы можете сделать:
@list.sort {|a, b| a[:time_ago] <=> b[:time_ago]}
Ответ 3
Вы также можете сделать @list.sort_by { |message| message.time_ago }
Ответ 4
Просто FYI, я не вижу смысла перемещать сообщения в новый список и сортировать их. Пока это ActiveRecord, это должно быть сделано непосредственно при запросе базы данных по моему мнению.
Похоже, вы должны сделать это следующим образом:
@messages = Message.includes(:replies).order("replies.created_at ASC")
Этого должно быть достаточно, если я не понял эту цель.
Ответ 5
В рельсах 4+
@list.sort_by(&:time_ago)
Ответ 6
Да, вы можете использовать group_by:
http://api.rubyonrails.org/classes/Enumerable.html#method-i-group_by