63 votes

Rails, Ruby, comment trier un tableau?

dans mon application rails, je crée un tableau comme suit:

 @messages.each do |message|

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

Après avoir fait ce tableau, j'aimerais le trier par ordre time_ago ASC, est-ce possible?

133voto

Mike Lewis Points 29305
  @list.sort_by{|e| e[:time_ago]}
 

La valeur par défaut est ASC, cependant si vous voulez DESC, vous pouvez faire:

  @list.sort_by{|e| -e[:time_ago]}
 

En outre, il semble que vous essayiez de construire la liste à partir de @messages . Vous pouvez simplement faire:

 @list = @messages.map{|m| 
  {:id => m.id, :title => m.title, :time_ago => m.replies.first.created_at }
}
 

11voto

grzuy Points 1695

Vous pourriez faire:

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

5voto

Dylan Markow Points 65796

Vous pouvez également faire @list.sort_by { |message| message.time_ago }

4voto

DanneManne Points 13408

Juste pour votre information, je ne vois pas l'intérêt de déplacer les messages dans une nouvelle liste, puis de les trier. À mon avis, tant qu'il s'agit d'ActiveRecord, cela devrait être fait directement lors de l'interrogation de la base de données.

Il semble que vous devriez pouvoir le faire comme ceci:

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

Cela devrait suffire à moins que je ne comprenne mal le but.

1voto

Spyros Points 13741

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X