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 :

Trie multiple dans une liste


Sujet :

C#

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2017
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2017
    Messages : 21
    Points : 6
    Points
    6
    Par défaut Trie multiple dans une liste
    Bonjour à tous,
    je voulais savoir s'il y avait une solution simple et rapide pour faire 2 tries avec un seul paramètre. Je m'explique :
    Ma liste se compose de chiffre en hexadécimal et aujourd'hui, je trie ma liste avec un simple ListeID.sort(); ce qui me donne :
    18FF0081
    18FF0082
    18FF0181
    18FF0182
    ....

    Hors, ce que j'aimerais, c'est que ma liste soit triée de cette manière :
    18FF0081
    18FF0181
    18FF0082
    18FF0182
    ....

    Donc l'idée que j'avais était de faire un premier trie sur les 2 derniers chiffres (81 et 82) puis ensuite de faire un deuxième trie sur le 3ème chiffre (0, 1, 2...).

    En cherchant un peu, voici ce que j'ai trouvé :
    [S]Liste_ID.OrderBy((Id & 0x000000FF).ThenBy(Id >> 8));[S]
    Malheureusement, j'ai une erreur qui m’empêche de compiler. Avez-vous une piste ?

    Merci par avance.

    Cordialement.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Points : 1 745
    Points
    1 745
    Par défaut
    Bonjour,

    La piste c'est toi qui la donne. Il fallait pousser de ce côté là et comprendre pourquoi ça ne compile pas.
    Si tu stockes les nombres sous forme de String :
    En convertissant en uint :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<String> Result = ListId.OrderBy(Id => (Convert.ToUInt32(Id,16) & 0x000000FF)).ThenBy(Id => Convert.ToUInt32(Id,16) >> 8).ToList();
    En utilisant les fonctions sur chaines de caractères (pas terrible je trouve) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<String> Result = ListId.OrderBy(Id => Id.Substring(6,2)).ThenBy(Id => Id.Substring(5,1)).ToList();
    Enfin en plus efficace , stocker les nombres en uint :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    List<UInt32> ListIdNum = new List<uint> {0x18FF0182, 0x18FF0081, 0x18FF0181, 0x18FF0082};
    List<uint> ResultInt = ListIdNum.OrderBy(Id => Id & 0x000000FF).ThenBy(Id => Id >> 8).ToList();

Discussions similaires

  1. Insertion triée efficace dans une List<T>
    Par olibara dans le forum C#
    Réponses: 4
    Dernier message: 11/10/2009, 23h43
  2. Réponses: 3
    Dernier message: 13/08/2009, 10h55
  3. choix multiples dans une liste déroulante
    Par luffy2mars dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 14/01/2009, 16h34
  4. Découpage de chaine et sélection multiple dans une liste
    Par Ben-o dans le forum ActionScript 1 & ActionScript 2
    Réponses: 3
    Dernier message: 05/12/2008, 10h56
  5. [Forms 9i] Sélection multiple dans une liste
    Par Magnus dans le forum Forms
    Réponses: 13
    Dernier message: 17/01/2007, 12h26

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