Ruby a une méthode de tri_by sur les énumérables. Fantastique! Vous pouvez donc faire quelque chose comme qui trierait un tas d'entrées par leurs noms de projet. Comment pouvez-vous y travailler de manière à ce que les projets ayant reçu le même nom, les entrées ont été triées à leur époque? P> P>
3 Réponses :
Vous pouvez utiliser la méthode de tri régulière pour le faire.
entries.sort do |a, b| comp = a.project.name <=> b.project.name comp.zero? ? (a.project.time <=> b.project.time) : comp end
le non nul? La méthode peut être utile ici: Trier {| A, B | (A.Project.name <=> B.Project.name) .nonzero? ou (A.Project.time <=> B.Project.time)}
Je suggérerais de mettre la colonne que vous souhaitez trier par une matrice.
entries.sort_by { |l| [l.project.name, l.project.time] }
Si vous voulez que le tri secondaire soit le plus récent - Premièrement, procédez comme suit: maintenant = heure. entrées.sort_by {| E | e.project.name, maintenant - e.project.time} code>
entrées.sort_by {| E | e.project.name, -e.project.time} a plus de sens.
Pas mal Anti, pas mal du tout!
Plus précisément, le premier élément a une priorité la plus élevée et l'élément suivant décide une cravate.
Renvoie un tableau: Ceci fonctionne car le <=> code> Opérateur sur les tableaux fait une comparaison "lexicale" sur le terrain qui est ce que vous avez 'RE RECHERCHEZ. P> P>