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

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : août 2017
    Messages : 19
    Points : 5
    Points
    5

    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 et Delphi
    Inscrit en
    juillet 2002
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : juillet 2002
    Messages : 639
    Points : 1 456
    Points
    1 456

    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: 12/10/2009, 00h43
  2. Réponses: 3
    Dernier message: 13/08/2009, 11h55
  3. choix multiples dans une liste déroulante
    Par luffy2mars dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 14/01/2009, 17h34
  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, 11h56
  5. [Forms 9i] Sélection multiple dans une liste
    Par Magnus dans le forum Forms
    Réponses: 13
    Dernier message: 17/01/2007, 13h26

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