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 :

Comment utilser le default comparer dans une liste ?


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut Comment utilser le default comparer dans une liste ?
    Bonjour

    J'ai constitué une liste composée d'elements (classes) contenant 2 int et un string

    Je veux trier cette liste sur le premier int de la classe
    Dois-je absolument definir un comparer pour cela ou le default comparer peut etre utilisé d'une maniere ou une autre.

    Dans le cas contraire, a quoi sert le default comparer ?

    Merci pour votre aide

  2. #2
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Par défaut
    Le "default comparer" obtenu via Comparer<T>.Default (utilisé par List quand tu ne lui en fournis pas un explicitement) nécessite que ta classe T implémente IComparable<T> ou IComparable à défaut.

    Donc si tu implémentes l'une de ces deux interfaces sur la classe contenue dans ta liste pour fournir une comparaison basée uniquement sur ton premier entier, tu n'auras pas à fournir de comparateur à ta liste.

    Cette implémentation fournira de fait le comparateur par défaut pour ta classe, ce qui n'empêchera pas d'en fournir un autre suivant tes besoins à l'occasion, mais de manière explicite.

    Par exemple, le comparateur par défaut du type Int32 doit les trier dans l'ordre croissant, mais rien n'empêcherai de fournir un comparateur qui les trierait dans l'ordre inverse, qu'il faudrait alors indiquer à la liste.

  3. #3
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Merci

    Donc si tu implémentes l'une de ces deux interfaces sur la classe contenue dans ta liste pour fournir une comparaison basée uniquement sur ton premier entier, tu n'auras pas à fournir de comparateur à ta liste.
    Pour ca je ne sais pas bien ce qu'il faut faire et je n'ai pas encore manipulé des types interface (je dois encore apprendre ca)


    Finalement un bon comparer fait maison c'est sans doute le plus simple et le plus explicite

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par olibara Voir le message
    Merci


    Pour ca je ne sais pas bien ce qu'il faut faire et je n'ai pas encore manipulé des types interface (je dois encore apprendre ca)


    Finalement un bon comparer fait maison c'est sans doute le plus simple et le plus explicite
    Justement, ce serait l'occasion d'apprendre à utiliser les interfaces. Ce n'est pas difficile à comprendre, et c'est un concept très puissant. En simplifiant un peu, implémenter une classe revient à hériter d'une classe abstraite, à 2 différences près :
    - tu peux implémenter plusieurs interfaces, alors que tu ne peux hériter que d'une seule classe
    - une interface ne contient aucun code, seulement les déclarations des méthodes et propriétés (alors qu'une classe abstraite peut avoir des méthodes non-abstraites)
    Pour les détails => voir les cours ou la doc...

    En fait, je pense qu'il faut implémenter IComparable pour définir l'ordre de tri "naturel" pour ce type (et c'est l'ordre qui sera utilisé par défaut). Pour trier d'une façon plus spécifique, tu utilises un Comparer.

  5. #5
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Merci je vais piocher un peu les interfaces !

  6. #6
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Par défaut
    Citation Envoyé par olibara Voir le message
    Merci je vais piocher un peu les interfaces !
    Si tu comptes faire un développement un tantinet sérieux, c'est en effet quelque chose à investiguer d'urgence...

    Peut-être devrais-tu te familiariser avec les concepts de base du langage dans un premier temps, parce que les interfaces c'est plutôt au tout début . Une fois le langage appréhendé, tu pourras explorer l'API offerte par le framework beaucoup plus sereinement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Comment rechercher des objets identiques dans une liste de vue?
    Par christs dans le forum C#
    Réponses: 9
    Dernier message: 14/06/2011, 14h23
  2. Réponses: 4
    Dernier message: 21/11/2010, 15h54
  3. Comment recupérer les cases selectionnés dans une liste à Checkbox
    Par Ange_1987 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 14/03/2009, 00h57
  4. Réponses: 7
    Dernier message: 07/01/2008, 17h50
  5. Comment récupérer le texte sélectionné dans une liste déroulante ?
    Par Je-cherche-pfe dans le forum Windows Forms
    Réponses: 3
    Dernier message: 02/09/2007, 20h35

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