Trier tableau + help [Résolu]

cs_emmanuel9 903 Messages postés mercredi 23 février 2005Date d'inscription 16 juin 2010 Dernière intervention - 7 avril 2005 à 15:37 - Dernière réponse : sebseb42 495 Messages postés dimanche 6 juillet 2003Date d'inscription 9 novembre 2007 Dernière intervention
- 8 avril 2005 à 12:23
Bonjour,

j'ai une classe Personne :

Personne
{
public :
String * nom ;
String * prenom ;
int age ;
}

et j'ai une arraylist de 15 instance de ma classe Personne, et je souhaiterais pouvoir les trier par exemple sur leur nom ou sur leur prenom ou sur leur age par ordre croissant ou decroissant. Mais je n'ais point vu de maniere qui permettre de le faire.
Je precise que j'ai une arraylist de 15 instance mais je peux faire aussi avec un tableau de 15 items.

Quelqun aurait t'il une solution ?

Par avance, merci.
Afficher la suite 

10 réponses

Répondre au sujet
titeoe 433 Messages postés samedi 26 avril 2003Date d'inscription 4 décembre 2009 Dernière intervention - 7 avril 2005 à 16:28
+3
Utile
personellement je construirait une datatable avec 3 champs correspondant aux 3 membres de ta classe (nom , prenom , age )

ensuite tu remplit ta datatable avec les données de ton arraylist

Ensuite tu peux utiliser les options de tri de l'objet datatable ou de la dataview associée, ce qui te permettra de trier ASC ou DESC sur la colonne que tu veux.

Ensuite tu écrit une méthode qui retransforme ta datatable en arraylist une fois triée.

pour résumer :

1/ private datatable GetDataTable ( ArrayList maListe)
{}

2/ private datatable SortTable ( datatable maTable , String maColone, String monSens)
{}

3/ private ArrayList GetArrayList ( datatable maTable )
{}

avantages : si modifie ta classe personne , tu n'a pas de code a réécrirer pour dire sur quel membre tu veux trier.

et hop
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de titeoe
titeoe 433 Messages postés samedi 26 avril 2003Date d'inscription 4 décembre 2009 Dernière intervention - 7 avril 2005 à 16:46
+3
Utile
sinon j'ai trouvé ca aussi :

http://www.c2i.fr/code.aspx?IDCode=559
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de titeoe
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 7 avril 2005 à 16:46
+3
Utile
En créant un sorter perso implémentant /library/fre/cpref/html/frlrfsystemcollectionsicomparerclasstopic.asp IComparer.
Petit exemple vite fait :

Sorter :
public enum PersonneSortMember
{
Nom,
Prenom,
Age
}

public class PersonneSorter : IComparer
{
public PersonneSorter ( PersonneSortMember sortBy )
{
m_sortBy = sortBy;
}

private PersonneSortMember m_sortBy;

#region Membres de IComparer

public int Compare(object x, object y)
{
Personne xPersonne = (Personne)x;
Personne yPersonne = (Personne)y;

int result = 0;

switch ( m_sortBy )
{
case PersonneSortMember.Nom:
result = xPersonne.nom.CompareTo(yPersonne.nom);
break;

case PersonneSortMember.Prenom:
result = xPersonne.prenom.CompareTo(yPersonne.prenom);
break;

case PersonneSortMember.Age:
result = xPersonne.age.CompareTo(yPersonne.age);
break;
}

return result;
}

#endregion
}

Utilisation :
liste.Sort(new PersonneSorter(PersonneSortMember.Nom));
liste.Sort(new PersonneSorter(PersonneSortMember.Prenom));
liste.Sort(new PersonneSorter(PersonneSortMember.Age));

Cocoricoooooooo !!!!
coq
MVP Visual C#
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_coq
sebseb42 495 Messages postés dimanche 6 juillet 2003Date d'inscription 9 novembre 2007 Dernière intervention - 7 avril 2005 à 18:24
+3
Utile
la solution de coq est de loin la meilleur, car elle est la plus
approprier, titeoe, je te suggere de passer par un SQL Server 2005 avec
la DB monter sur un RAID :P



tu peux creer un Sorter perso comme l'a montrer coq, et l'utiliser
aussi avec la fonction Array.Sort() si tu as besoin de trier un tableau
et non une liste :)
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de sebseb42
Athalus 131 Messages postés jeudi 17 juin 2004Date d'inscription 7 juillet 2005 Dernière intervention - 7 avril 2005 à 16:12
0
Utile
Bonjour,

jetes un oeil ici
http://www.csharpfr.com/forum.v2.aspx?ID=211455 ca peut t'aider

hum.......
Commenter la réponse de Athalus
cs_emmanuel9 903 Messages postés mercredi 23 février 2005Date d'inscription 16 juin 2010 Dernière intervention - 7 avril 2005 à 16:24
0
Utile
si j'ai un tableau à une dimension dedans j'arrive a le trier :

talbeau->sorting = Sorting::ascending ou descending

la syntaxe est pas bonne mais bon

mais en faite je voudrais trier mes objets sur la base d'une de leur propriété
Commenter la réponse de cs_emmanuel9
cs_emmanuel9 903 Messages postés mercredi 23 février 2005Date d'inscription 16 juin 2010 Dernière intervention - 7 avril 2005 à 16:36
0
Utile
ah ok merci, je vais essayer ca alors.
Commenter la réponse de cs_emmanuel9
cs_emmanuel9 903 Messages postés mercredi 23 février 2005Date d'inscription 16 juin 2010 Dernière intervention - 7 avril 2005 à 16:53
0
Utile
merci, je vais essayer les deux solutions enfin je vais d'abord essayer de comprendre héhé
Commenter la réponse de cs_emmanuel9
titeoe 433 Messages postés samedi 26 avril 2003Date d'inscription 4 décembre 2009 Dernière intervention - 8 avril 2005 à 10:10
0
Utile
je suis d'accord avec toi sebseb42, la solution de coq est vraiment bien ( et en plus c'est la meme que celle de mon 2e post).

Mais bon, j'ai le droit d'etre fatigué et pas aussi balaise que coq ;)))
Commenter la réponse de titeoe
sebseb42 495 Messages postés dimanche 6 juillet 2003Date d'inscription 9 novembre 2007 Dernière intervention - 8 avril 2005 à 12:23
0
Utile
ta solution etait inaproprier mais pas mauvaise du tout, moi je suis une grosse quiche en base de donnée, datatable, dataset et tout le tintouin, et je suis content que tu m'es appris des choses a ce sujet :)
Commenter la réponse de sebseb42

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.