12
votes

ruby sort_by deux fois

Ruby a une méthode de tri_by sur les énumérables. Fantastique! Vous pouvez donc faire quelque chose comme xxx

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?


0 commentaires

3 Réponses :


6
votes

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


1 commentaires

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



25
votes

Je suggérerais de mettre la colonne que vous souhaitez trier par une matrice.

entries.sort_by { |l| [l.project.name, l.project.time] }


4 commentaires

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}


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.



3
votes

Renvoie un tableau: xxx

Ceci fonctionne car le <=> Opérateur sur les tableaux fait une comparaison "lexicale" sur le terrain qui est ce que vous avez 'RE RECHERCHEZ.


0 commentaires