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 :

liste triée mais pas SortedList :p


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 69
    Par défaut liste triée mais pas SortedList :p
    Bonjour,

    Je voudrais avoir une liste d'objet triée sur un de leur champs. En tappant sorted List sur google je tombe sur la classe sorted list qui n'est pas ce que je veux car je ne peut pas avoir "d'égalité" entre mes objets. Comment faire pour :
    1-avoir une liste triée de mes objets avec eventuellement des égalités
    2-que à chaque ajout d'un objet à ma liste, celle ci reste triée

    Est ce qu'il y a une classe pour cela ?
    Sinon j'avais pensé à implémenté IComparable pour mes objets et appeller MaList.Sort() après chaque ajout d'un élément mais cela est surement trop lourd niveau compléxité (ajouté un élément à une liste déja triée ne doit pas être aussi complexe que ajouté l'élément et retrier la liste...)

    Une idée?

  2. #2
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    De façon générale quelque soit le langage, le composant (liste, tableau, ...), tu faire des "fonctions" d'ajout dans une liste qui place l'élément pas au hasard mais de façon trié.
    Donc mon idée est que tu crées une classe Maliste qui hérite de liste et tu surcharge la méthode add() pour prendre en charge l'ajout trié.

  3. #3
    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
    Citation Envoyé par duaner Voir le message
    Bonjour,

    Je voudrais avoir une liste d'objet triée sur un de leur champs. En tappant sorted List sur google je tombe sur la classe sorted list qui n'est pas ce que je veux car je ne peut pas avoir "d'égalité" entre mes objets. Comment faire pour :
    1-avoir une liste triée de mes objets avec eventuellement des égalités
    2-que à chaque ajout d'un objet à ma liste, celle ci reste triée

    Est ce qu'il y a une classe pour cela ?
    Sinon j'avais pensé à implémenté IComparable pour mes objets et appeller MaList.Sort() après chaque ajout d'un élément mais cela est surement trop lourd niveau compléxité (ajouté un élément à une liste déja triée ne doit pas être aussi complexe que ajouté l'élément et retrier la liste...)

    Une idée?
    La solution de la liste retriée à chaque ajout n'est pas si mauvaise, vu que la liste est déjà triée avant, tu te rapproche de la complexité minimum à chaque ajout (car tu n'as plus qu'un élément à replacer).
    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

  4. #4
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    La solution de la liste retriée à chaque ajout n'est pas si mauvaise, vu que la liste est déjà triée avant, tu te rapproche de la complexité minimum à chaque ajout (car tu n'as plus qu'un élément à replacer).
    Autant ajouté l'object de façon trié, le rangé correctement dès le début. Ce n'est pas moins gourmand en ressource, cela me parait juste plus logique et simple d'utilisation dans son cas précis.

  5. #5
    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
    Citation Envoyé par ced600 Voir le message
    Autant ajouté l'object de façon trié, le rangé correctement dès le début. Ce n'est pas moins gourmand en ressource, cela me parait juste plus logique et simple d'utilisation dans son cas précis.
    C'est moins facile pour un débutant, mais cela parait logique, tu as raison.
    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

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 69
    Par défaut
    C'est moins facile pour un débutant, mais cela parait logique, tu as raison.
    Oui c'est ce que je vais donc faire, faire ma propre liste et ajouté par dichotmie dans ma liste déja triée mais j'avais imaginé qu'il existait déja quelque chose d'existant pour cela..

  7. #7
    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 : 44
    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
    ajouté un élément à une liste déja triée ne doit pas être aussi complexe que ajouté l'élément et retrier la liste...
    Je pense que la structure la plus adaptée pour faire ça est un B-Tree (arbre binaire). Je ne suis pas sûr qu'il existe une classe qui implémente ça dans le framework, mais c'est pas très difficile à faire...

    Sinon tu peux faire ça avec une liste chainée, en héritant de LinkedList : tu ajoutes une méthode Add qui va insérer l'élément à sa place. L'inconvénient c'est que tu dois parcourir toute la liste jusqu'à l'emplacement voulu, ce qui fait une complexité en o(n)... pas top au niveau perf si la liste est très longue.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 15/03/2010, 21h44
  2. Erreur sur les listes en débug mais pas en prod.
    Par phfle1 dans le forum VB.NET
    Réponses: 8
    Dernier message: 29/08/2008, 22h52
  3. [BibTex] Liste d'auteurs supérieure à 4 mais pas de "et al"
    Par franc82 dans le forum Bibliographies - Index - Glossaires
    Réponses: 1
    Dernier message: 02/07/2007, 13h21
  4. [AJAX] 2 listes oui mais pas 3?
    Par franfr57 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 06/05/2007, 23h08
  5. Réponses: 4
    Dernier message: 21/08/2005, 19h14

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