IT박스

Rails, Ruby, 배열 정렬 방법?

itboxs 2020. 11. 23. 07:55
반응형

Rails, Ruby, 배열 정렬 방법?


내 레일 앱에서 다음과 같이 배열을 만들고 있습니다.

@messages.each do |message|

  @list << {
    :id => message.id,
    :title => message.title,
    :time_ago => message.replies.first.created_at
  }
end

이 배열을 만든 후 time_ago ASC 순서로 정렬하고 싶습니다. 가능합니까?


 @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 }
}

다음과 같이 할 수 있습니다.

@list.sort {|a, b| a[:time_ago] <=> b[:time_ago]}

레일 4+

@list.sort_by(&:time_ago)

당신은 또한 할 수 있습니다 @list.sort_by { |message| message.time_ago }


참고로 메시지를 새 목록으로 이동 한 다음 정렬하는 것이 중요하지 않습니다. 그것이 ActiveRecord 인 한 그것은 제 생각에 데이터베이스를 쿼리 할 때 직접 수행되어야합니다.

다음과 같이 할 수 있어야 할 것 같습니다.

@messages = Message.includes(:replies).order("replies.created_at ASC")

목적을 오해하지 않는 한 충분합니다.


예, group_by를 사용할 수 있습니다.

http://api.rubyonrails.org/classes/Enumerable.html#method-i-group_by

참고 URL : https://stackoverflow.com/questions/5739158/rails-ruby-how-to-sort-an-array

반응형