Comment "nommer" un objet pour le retrouver (String) ? - Java - Programmation
Marsh Posté le 03-05-2019 à 22:57:16
ReplyMarsh Posté le 04-05-2019 à 06:58:29
ReplyMarsh Posté le 06-05-2019 à 14:59:44
Ça fonctionne très bien, merci encore
Bon maintenant je dois trier par scores, descendant, ET, en cas d'égalités, par ordre d'arrivée dans le jeu
Alors là je réfléchiiiiiiiis
Marsh Posté le 06-05-2019 à 17:10:47
Une SortedMap (TreeMap par exemple) peut conserver ta collection de clés-valeurs dans un ordre arbitraire, mais le tri peut uniquement se faire sur les clés.
Si ta collection de joueurs n'est pas énorme, tu peux sans problème la trier à chaque appel.
Si tu veux vraiment la maintenir dans un ordre qui dépend des clés et des valeurs, il doit y avoir moyen en combinant plusieurs structures de données comme TreeMap, PriorityQueue, BiMap (dans Google Guava), etc.
Marsh Posté le 06-05-2019 à 18:24:24
DDT a écrit : Une SortedMap (TreeMap par exemple) peut conserver ta collection de clés-valeurs dans un ordre arbitraire, mais le tri peut uniquement se faire sur les clés. |
Surtout qu'avec le timsort de java 7, trier une collection quasi-triée est très efficace. Sinon, treeset avec un comparateur custom je présume (priorityqueue ça donne le min/max, mais toute la collection n'est pas nécessairement triée). Par contre faut bien penser à sortir l'élément, le mettre à jour puis le réinsérer, si l'objet est modifié en place la collection le verra pas et va pas le bouger au bon endroit.
Tu peux utiliser une hashmap pour indexer, ou même faire une recherche linéaire s'il y a peu d'entrées ce sera beaucoup plus rapide.
Marsh Posté le 06-05-2019 à 21:12:18
ReplyMarsh Posté le 07-05-2019 à 00:32:20
Warf j'y suis arrivé, avec un Comparator maison :
Code :
|
(position1 et 2 c'est l'ordre d'arrivée des Users dans le jeu, je m'en sert si le score est égal)
Il y a longtemps que je voulais arriver à faire un double tri (trier sur 2 critères)
J'y suis arrivé avec 2 HashMap, 1 avec nom du joueur et son score, l'autre avec nom du joueur et sa position dans l'ordre d'arrivée, ensuite je mets tout dans des objets Members (nom, score, position) que je mets dans un arrayList que je trie (Collections.sort)
Je suis pas arrivé à le pondre moi même, j'ai trouvé sur le web un gars qui trie sur 3 critères
Marsh Posté le 07-05-2019 à 08:12:40
Si t'es en Java 8, Comparator a pas mal de nouvelles méthodes pour faciliter ou combiner. Ici au lieu d'un comparateur custom tu pourrais utiliser
Code : |
Marsh Posté le 07-05-2019 à 09:55:32
ReplyMarsh Posté le 07-05-2019 à 13:37:24
Marche très bien. Et très compact
Code :
|
Merci !
Marsh Posté le 07-05-2019 à 18:45:45
J'ai tout refondu mon code, j'ai plus que une HashMap<String, Member>. Au fil des tours j'extrais mes members, je modifie le score et je les réinsère. A la fin je parcours le HashMap pour tout mettre dans un ArrayList et faire mon fameux tri. Je vais voir si comme il me semble que vous m'avez conseillé je peux trier le HashMap ou utiliser un Tree
Marsh Posté le 03-05-2019 à 14:16:57
Bonjour
C'est pas la première fois que je suis bloqué à ce niveau. Je suis sur le puzzle Darts de CodinGame, et je dois donc gérer une partie de flechettes, avec des joueurs et leurs scores qui augmentent. Je ne sais pas si c'est ça qu'il faut faire mais par exemple nommer mes objets User avec leur nom (joe, jack, billy) pour pouvoir les retrouver et augmenter leur score au fil des tours de tirs ?
Je ne sais pas comment faire.
A chaque tour CodinGame m'envoie un String "Nom du joueur" puis son tir (int X, int Y sur la cible)
Merci d'avance si vous pouvez m'aider
---------------
Mes apps | Viens coder | Mon topal de vente