Trier une liste

Résolu
Smookii Messages postés 10 Date d'inscription lundi 18 juin 2012 Statut Membre Dernière intervention 29 mars 2013 - 27 mars 2013 à 16:14
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 - 29 mars 2013 à 15:56
Bonjour,
je suis entrain de faire un tower defense en Xna, et pour gérer les tours j'utilise une list<Class_newTower> qui s'appelle Tour et qui contient la position des tours, les dégats de la tour , leurs portées etc...

Mais voilà les tours s'affiche selon leurs position dans la liste.
Ce qui peu donné des choses comme cela :


Alors que je voudrais :


Il faut donc que je trie ma liste par la position Y, pour que plus la tour sois vers le haut de l'écran plus cette tour sera en début de liste.

J'ai essayer avec la fonction Sort, mais je n'arrive pas à faire la syntaxe correcte pour trier les item de la liste par leurs positions.

Est-ce possible avec la fonction Sort ou est ce que je dois utiliser une fonction totalement différente ?

7 réponses

Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
28 mars 2013 à 10:16
Je viens de vérifié.
Une fois implementé l'interface Icomparable
l.sort();//tout simplement



Whismeril
3
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
27 mars 2013 à 19:13
Bonsoir, pour te servir de la méthode sort(), il faut que ta classe Class_newTower "explique" à cette méthode comment trier.

Pour cela il faut implémenter l'interface IComparable.
Pour faire cela, à la déclaration de ta classe tu ajoutes ": IComparable" de cette façon
class Class_newTower : IComparable


Ensuite sur le mot IComparable, tu fais click droit/implémenter l'interface.
Ca va t'écrire une méthode "CompareTo(obj other)", c'est dans cette méthode que tu dois montrer comment trier.

Dans ton cas
public int CompareTo(Class_newTower other)//je remplace le type objet de la variable other par Class_newTower pour ne comparer que des Class_newTower ensemble
{
   return this.Y.CompareTo(other.Y);//je pars du principe que Y est un type déjà comparable, les types de base le sont tous (int, decimal, double, string etc...), et donc j'indique que Class_newTower est comparée par la valeur de Y
}




Une autre solution est d'utiliser LinQ si tu travailles avec la framework 3.5 ou supérieur.
Dans ce cas

list<Class_newTower>() maListeTriee = (from tour in maListePasTriee
                                       orderby tour.Y
                                       select tour).ToList<Class_newTower>();


J'ai écrit de tête, il y a peut-être des coquilles.

Whismeril
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
27 mars 2013 à 19:29
Salut,

la fonction Sort() (sans paramètre) ne saura pas comment trier des objets. Je t'invite à regarder la MSDN concernant la fonction prenant un param Comparison<T>, ou en implémentant l'interface IComparable sur ta classe.

Enfin, le mieux serait d'avoir une liste déjà dans le bon ordre, pour un souci de performance, mais là je peux pas t'aider.
0
Smookii Messages postés 10 Date d'inscription lundi 18 juin 2012 Statut Membre Dernière intervention 29 mars 2013
27 mars 2013 à 21:18
Rebonsoir,
Alors merci pour vos réponse qui mon pas mal aidé, mais j'ai encore un problème, j'ai implémenter l'interface IComparable mais je ne sais pas comment faire appelle à elle.

Donc je suis dans ma classe jeu, je viens d'ajouter deux tours à ma list<Class_newTower> qui se nomme "l".
Donc pour la trier il faut que j'utilise

l.Sort(...)


et c'est ici que je ne sais pas comment je suis sensé faire appelle à la fonction CompareTo.

Encore une fois merci pour vos réponses.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
27 mars 2013 à 21:33
l.sort();//tout simplement
//ou peut être
l = l.sort();//je ne suis pas sur de tête et je ne peux pas tester ce soir


Whismeril
0
Smookii Messages postés 10 Date d'inscription lundi 18 juin 2012 Statut Membre Dernière intervention 29 mars 2013
29 mars 2013 à 15:50
Merci à vous pour vos réponses, j'ai réussi à organiser ma liste merci encore.
0
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
29 mars 2013 à 15:56
De rien


Whismeril
0
Rejoignez-nous