engelho
Messages postés115Date d'inscriptionmercredi 26 mai 2004StatutMembreDernière intervention 2 août 2005
-
9 mai 2005 à 10:31
engelho
Messages postés115Date d'inscriptionmercredi 26 mai 2004StatutMembreDernière intervention 2 août 2005
-
13 mai 2005 à 16:34
Bonjour,
Je possède un un tableau que je souhaite trier. Toutefois ce tableau comprend des objets...
J'ai implémenté la fonction CompareTo().
Mais je me demande si je peux utiliser Array.Sort() et passer une variable de mon objet en argument (du genre Array.Sort(monObjet.MaVariable);), ou si je dois ré-écrire une fonction de tri complète dans mon objet...
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 9 mai 2005 à 10:49
Salut,
Une idée est de créer une class qui dérive de l'interface IComparer, d'y implémenter la fonction de tris 'bool Compare(object o1, object o2)' et ensuite de créer une instance de cette classe qui tu passeras à la méthode Sort de ton Array.
C'est une solution assez élégante
engelho
Messages postés115Date d'inscriptionmercredi 26 mai 2004StatutMembreDernière intervention 2 août 2005 9 mai 2005 à 15:34
Décidément, je dois être allergique... lol.
Plus sérieusement, je n'ai pas tout suivi... euh... en implémentant compareTo ou compare, mes objets seront triés automatiquement????
euh... et si moi, je veux pouvoir trier un coup sur un paramètres, et un coup sur un autre (changer de tris en cour de route quoi), il me suffit de créer plusieurs fonction compareTo????
ca serait magique... malheureusement, j'ai passé l'age de croire a la magie...
désolé, ça devient presque trop facile pour cerveau détraqué, et je n'arrive pas à tous suivre ;)
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 10 mai 2005 à 05:28
Si tu as le code source de la classe des objets a tries, tu implementes l'interface Icomparable, puis tu appelles Array.Sort( Array ) qui utilisera ta nouvelle implementation, chaque elements sera compares avec ta propre definition de IComparable.CompareTo( Object )
Si tu n'a pas le code soure, tu implementes une nouvelle classe qui derive de IComparer, puis tu appelles Array.Sort( Array, Icomparer ) chaques elements du tableau sera compares avec Icomparer.Compare( Object, Object )
Pour changer de tri en cours de route y'a toujours Array.Reverse( Array ) ou alors c'est dans ta methode CompateTo( Object ) ou Compare( Object, Object ) que tu definis des conditions pour ne pas avoir toujours le meme ordre de tri, selon une variable "globale" par exemple que tu redefinis avant chaque appelle a Array.Sort( Array )
engelho
Messages postés115Date d'inscriptionmercredi 26 mai 2004StatutMembreDernière intervention 2 août 2005 10 mai 2005 à 08:19
Ca y est, j'ai compris! eurêka!
merci beaucoup.
Allez, une dernière question juste pour la route... Enfin, c'est plus une confirmation...
Je suppose que si ma classe hérite de Icomparer (ou icomparable), il m'est impossible de surcharger directement la fonction sort (qui semble appartenir a la classe array)...
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 10 mai 2005 à 08:52
Euh si c'est possible, mais à priori ça ne semble pas utile puisque la méthode Sort en elle-même ne fait rien, si ce n'est appelé la méthode Compare de l'interface qui contient toute la logique...
engelho
Messages postés115Date d'inscriptionmercredi 26 mai 2004StatutMembreDernière intervention 2 août 2005 10 mai 2005 à 13:31
Ah c'est possible? alors je vous expose une idée, et vous me dites si c'est pas trop con....
Et si je surcharge cette fonction, en lui mettant un variable qui permet de choisir sur quels paramètre je tri mes arrays??? bon, je pensais limiter ça a quelques valeurs prédéfinies (façon enum), mais ca pourrais simplifier les choses....
Parce que je veux permettre a la personne qui visite le site de trier les données d'un datagrid en cliquant sur l'en-tête (entre autre tri possibles), donc, ca serait sympa d'utiliser la même fonction en changeant un paramètre...
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 10 mai 2005 à 13:53
Oui bien sur, voici un exemple que j'avais fait en ajoutant une méthode sort à une collection que j'avais construite (SortType est justement un enum et DateSorter/TitleSorter des classes qui implémentent la méthode Compare ) :
engelho
Messages postés115Date d'inscriptionmercredi 26 mai 2004StatutMembreDernière intervention 2 août 2005 13 mai 2005 à 16:34
Oui, bon, je sais, ca commence a dater... mais j'ai eut une semaine chargée, et je viens seulement de me rendre compte....
bidou, ta surcharge de la fonction sort, tu l'as faite dans un objet qui te servait de collection, c'est bien ça??
Si c'est ça, ca ne vas pas pour ce que je voulais faire....
je tri un Array tout ce qu'il y a de plus banal (et en fait, je ne peux pas trop me permettre d'y toucher). Quand je parlais de surcharger sort(); je voulais dire dans l'objet qui implémente icomparable....