IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[C#] arraylist et tri alphabetique


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 20
    Par défaut [C#] arraylist et tri alphabetique
    Bonjour,

    But : Je souhaite trier par ordre alphabétique les champs nom puis prénom de mon arraylist.

    Je possède une arraylist "employe" contenant des personnes.
    Ma classe personne contient les caractéristiques de ma personne (nom, prenom, tel, mail...)
    Dans cette classe personne j'implemente Icomparable:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    public class Personne : IComparable
    {
        public Personne()
        {
            nomRes = "";
            prenomRes = "*";
            mailRes = "";
            telRes = "";
        }
     
        public int CompareTo(object o)
        {
            Personne op = (Personne)o;
            int res = nomRes.CompareTo(op.nomRes);
            if (res == 0) res = prenomRes.CompareTo(op.prenomRes);      
            return res;
        }
     
    ...etc
    J'effectue un tri de mon arraylist en utilisant
    Or, quand j'effectue des tests mes résultats ne sont pas toujours triés..(la plus part des cas.)

    Comment puis-je obtenir un tri correct? (par nom puis par prénom.)
    Je cherche encore, mais ma question reste encore sans réponse.

    Merci à l'avance pour votre aide.

    Lalou

  2. #2
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Tu as essayé de mettre un point d'arret dans ta méthode CompareTo, pour voir ce qu'il se passe ?
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  3. #3
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 20
    Par défaut
    Quand j'effectue ma recherche par exemple pour une personne s'appelant "hard" j'ai mes résultats trié(nom et prénom). Le fait d'entrer "hard" me recherche toutes les personnes dont le nom de famille commence par "hard".(hardy par exemple)

    Par contre si je tape "har" ... j'obtiens lors du debug:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <string>
    Impossible d'effectuer un cast d'un objet de type 'System.Object[]' en type 'System.String'.
    </string>
    et ma liste n'est pas du tout triée...

    je ne comprend pas pourquoi j'ai des cas ou sa marche et d'autres pas...

  4. #4
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Il faudrait que tu postes le code pour qu'on puisse t'aider.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  5. #5
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 20
    Par défaut
    Voila mon code:

    Ma fonction connexion qui se trouve dans ma classe service:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
        private ArrayList _employes;
        public ArrayList Employes
        {
            get{return this._employes;}
            set{this._employes = value;}
        }
     
        [WebMethod]
        public string Connexion(string nom, string prenom)
        {
            _employes = new ArrayList();
     
            nom = nom + "*";
            prenom = prenom + "*";
     
            try
            {
                DirectoryEntry Ldap = new DirectoryEntry("LDAP://************);
                DirectorySearcher searcher = new DirectorySearcher(Ldap);
                searcher.Filter = "(&(sn=" + nom + ")(givenName=" + prenom + "))";
     
                foreach (SearchResult result in searcher.FindAll())
                {
                    Personne perso = new Personne();
                    DirectoryEntry DirEntry = result.GetDirectoryEntry();
     
                    perso.NomRes = (string)DirEntry.Properties["sn"].Value;
                    perso.PrenomRes = (string)DirEntry.Properties["givenName"].Value;
                    if ((string)DirEntry.Properties["telephoneNumber"].Value != null)
                        perso.TelRes = (string)DirEntry.Properties["telephoneNumber"].Value;
                    if ((string)DirEntry.Properties["mobiletelephonenumber"].Value != null)
                        perso.MobileRes = (string)DirEntry.Properties["mobiletelephonenumber"].Value;
                    
                    }
                    _employes.Add(perso);
                }
     
                _employes.Sort();
     
                Ldap.Close();
            }
            catch (Exception Ex)
            {
                return Ex.Message;
            }
            return "Erreur, veuillez contactez l'administrateur.";
        }
     
    }
    La classe personne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    public class Personne : System.IComparable
    {
        public Personne()
        {
            nomRes = "";
            prenomRes = "*";
            telRes = "";
            mobileRes = "";
        }
     
     
        public int CompareTo(object o)
        {
            Personne op = (Personne)o;
            int res = NomRes.CompareTo(op.NomRes);
            if (res == 0) res = PrenomRes.CompareTo(op.PrenomRes);      
            return res;
        }
     
     
        private string nomRes;
        public string NomRes
        {
            get { return nomRes; }
            set { nomRes = value; }
        }
     
        private string prenomRes;
        public string PrenomRes
        {
            get { return prenomRes; }
            set { prenomRes = value; }
        }
     
        private string telRes;
        public string TelRes
        {
            get { return telRes; }
            set { telRes = value; }
        }
     
        private string mobileRes;
        public string MobileRes
        {
            get { return mobileRes; }
            set { mobileRes = value; }
        }
    }
    Merci

    Lalou

  6. #6
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Tu utilises le Framework 2.0 ou 1.0/1.1 ? Car si tu es en 2.0, tu pourais utiliser les liste génériques plutôt que des ArrayList



    A+

  7. #7
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 20
    Par défaut
    je dois être en 2.0.
    Dans mon projet je récupère mon arraylist et j'utilise les datatable puis dataset pour stocker les données, mes données sont visible grace à l'objectlist.
    Si je change mon arraylist par des listes générique j'ai peur que sa me mette mon projet en pagaille..( La peur du débutant.)

    Je viens de remarqué que des fois qd j'effectue ma recherche il me sort 23 personne pour "dupont*" et 12 pour "dup*".. en lançant le pas a pas il me génère une exception (la meme qu'en haut).. je commence a désespèrer.
    Pourtant mon code a l'air de "marcher".

    J'ai regardé plus précisèment dans l'annuaire LDAP que j'ai a ma disposition. La personne qui me génère une exception possède deux attributs identiques "telephoneNumber" ( j'ai remarqué ces doublons aussi pour d'autres champs "buildingName"...).
    Quand une exception est généré elle ne passe pas par ma ligne de code:
    donc mon tri n'est pas effectué.

    Comment puis-je passé outre ce pb.. sachant que je ne peut pas modifier les champs du LDAP ?

    LaLou

Discussions similaires

  1. [deb]Try alphabetique de string?
    Par Marc_3 dans le forum Débuter
    Réponses: 4
    Dernier message: 05/12/2005, 11h04
  2. [LG]Tri alphabetique avec les pointeurs
    Par zbooon dans le forum Langage
    Réponses: 4
    Dernier message: 06/03/2005, 17h04
  3. Tri alphabetique
    Par wil4linux dans le forum C++
    Réponses: 17
    Dernier message: 16/02/2005, 23h02
  4. Réponses: 2
    Dernier message: 08/04/2004, 16h30
  5. [LG]tri alphabétique
    Par Marcus2211 dans le forum Langage
    Réponses: 5
    Dernier message: 17/11/2003, 16h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo