J'ai une arraylist d'objet personne et je voudrais mettre en premier dans mon arraylist toutes les personnes qui ont le paramètre "nouveau = true", comment faire ? implementer l'interface Icomparer ? ben oui mais comment ? j'ai pas trouver
> A quoi correspond this.nouveau ?
Tu as dis plus haut que tu avais un parametre "nouveau", c'est pour ca que j'ai utilisé "nouveau".
la ligne compare donc la variable nouveau de obj a la variable nouveu de l'objet courant.
j'aurais aussi pu mettre
<HR>
return
this.nouveau.CompareTo(((Personne)obj).nouveau);
<HR>
Mais a ce moment là, tu aurais eu un tri inverse (false en premier, true ensuite)
Si tu veux utiliser la méthode Personne.get_Nouveau() qui te ramene un bool, tu dois faire
<HR>
public int CompareTo(object obj)
{
return ((Personne)obj).get_Nouveau().CompareTo(this.get_Nouveau());
}
<HR>
Mais en C#, par convention on utilises des Propriétés plutot que des accesseurs (pas de méthode get_machin)
<HR>
private
bool nouveau;
public
bool Nouveau
{
get {
return
this.nouveau; }
//set { this.nouveau = value; } (enlever le commentaire si tu as besoins d'acceder a nouveau en ecriture)
}
public int CompareTo(object obj)
{
return ((Personne)obj).Nouveau.CompareTo(this.Nouveau);
}
ben en faite avec public int CompareTo(object obj) il me met impossible d'instancier une classe abstraite ce qui n'est pas le cas avec
public int CompareTo(object obj, object obj2) et quand je fais :
En fait, je suis parti du principe que tu n'utilisais pas IComparer, mais IComparable (et que tu l'implementais directement sur ta classe Personne, pas sur une classe "Sorter"
IComparer met en oeuvre la méthode Compare(object, object)
IComparable implement la méthode Compare(object)
et dans ce cas, tu peux utiliser liste_personne->Sort(); tout simplement, car personne implementant IComparable, le Sort va marcher tout seul.
Dis moi si ca peux marcher comme ca pour toi, sinon je vais voir avec IComparer
ArrayList list =
new
ArrayList(4);
list.Add(
new
Personne(0,
true));
list.Add(
new
Personne(1,
false));
list.Add(
new
Personne(2,
false));
list.Add(
new
Personne(3,
true));
list.Add(
new
Personne(4,
true));
list.Sort(
new
Personne.
PersonneComparer());
C'est bizarre ca, que personne->get_Personne_Nouveau().CompareTo() attende un objet, dans la doc c'est bien marqué que bool.CompareTo peut attendre soit un objet, soit un bool.
J'ai malheureusement rien devant moi pour tester.
Pour ta méthode, si elle fonctionne, garde là. ;)
Ou sinon, plus proprement, tu pourrais implementer IComparable sur ta classe Personne, et utiliser personne1.CompareTo(personne2)
je cast obj en personne, je fais
((
Personne)obj).get_Nouveau()..... mais après get_nouveau je me retrouver avec un bool et a quoi correspond this.nouveau ?
Merci de ta réponse, le seul hic à priori c'est ici : return tempy.nouveau.CompareTo(tempx.nouveau); CompareTo attend un object et on lui passe un bool. J'ai essayer comme ca apparement ca marche : qu'en penses tu ? si le frais 1 à true et pas l'autre alors il passe devant sinon il passe derriere, enfin je crois
[Serializable]
public __gc class PersonneNouveauSorter : public IComparer
{
Oui c'est bizarre pourtant pour moi CompareTo je peux y mettre qu'un objet j'ai pas le choix mais c'est sur que ta méthode eu été bcp plus propre, merci de ton aide.