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

Dotnet Discussion :

OrderBy List(Of List(Of String)


Sujet :

Dotnet

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 82
    Points : 47
    Points
    47
    Par défaut OrderBy List(Of List(Of String)
    Bonjour,
    J'essaye de faire un tri sur une liste de liste de string qui ressemble à:

    toto / 48 / 155 / titi
    tutu / 21 / 210 / 88
    lulu / 85 / 555 / 4re

    Je voudrais pouvoir trier avec le choix de la colonne. Trier ascendant ou descendant par la colonne 1,2,3 ou 4.

    J'ai trouvé pas mal d'infos sur LINQ ou en utilisant orderby ou SORT mais sur des listes simples. Je ne trouve pas sur du liste de liste.

    Pouvez vous m'aider ?
    Merci

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur Informatique
    Inscrit en
    Décembre 2005
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur Informatique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 146
    Points : 158
    Points
    158
    Par défaut
    Ce n'est pas le plus élégant, mais si tu n'as pas la main pour avoir une structure de donnée plus adaptée. Je pense que le plus simple pour ton besoin est de transformer ta liste en une structure de données qui te permettra de résoudre ton problème.
    Notamment, en effectuant un split sur chaque ligne pour d'obtenir une liste d'objet ou afin d'alimenter une table au choix.
    Tu sera alors en mesure de trier sur la colonne ou la propriété qui t'intéresses par cette démarche.
    Mon blog est sur https://arphonis.fr et bientôt d'autres fonctionnalités seront disponible dessus.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 82
    Points : 47
    Points
    47
    Par défaut
    La structure peut varier donc je ne peux me rattacher à une liste de classes fixes. Pas moyen d'ordonner sur une liste de liste si je comprends bien ?

  4. #4
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 153
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par touf26 Voir le message
    La structure peut varier donc je ne peux me rattacher à une liste de classes fixes. Pas moyen d'ordonner sur une liste de liste si je comprends bien ?
    Il suffit de surcharger les méthodes utilisées pour la comparaison (ou simplement passer un comparer particulier lors du Sort()).
    Et dans ce comparer surchargé, tu extrais la partie de la chaîne qui t'intéresse.

    Exemple en C# :
    Code csharp : 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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
    using System;
    using System.Collections.Generic;
     
    namespace MySort
    {
        class Program
        {
            static void Main(string[] args)
            {
                List<string> liste = new List<string>() { "toto/48/155/titi", "tutu/21/210/88", "lulu/85/555/4re" };
     
                Console.WriteLine("Liste non triée");
                AfficheListe(liste);
     
                Console.WriteLine("Liste avec tri par défaut");
                liste.Sort(); // le sort de base
                AfficheListe(liste);
     
                Console.WriteLine("Liste avec tri par la troisième colonne décroissante");
                liste.Sort(new MyComparer(2, false)); // colonne 2 desc
                AfficheListe(liste);
     
                Console.WriteLine("Liste avec tri par la quatrième colonne croissante");
                liste.Sort(new MyComparer(3, true)); // colonne 3 asc
                AfficheListe(liste);
     
                Console.ReadKey(true);
            }
     
            static void AfficheListe(List<string> liste)
            {
                Console.WriteLine("Ma belle liste :");
                foreach (string line in liste)
                {
                    Console.WriteLine(line);
                }
                Console.WriteLine();
            }
        }
     
        public class MyComparer : IComparer<string>
        {
            private readonly int Column = 0;
            private readonly bool Asc = true;
     
            public MyComparer(int column, bool asc)
            {
                Column = column;
                Asc = asc;
            }
     
            public int Compare(string x, string y)
            {
                int res = 0;
     
                if (string.IsNullOrWhiteSpace(x))
                {
                    if (!string.IsNullOrWhiteSpace(y))
                    {
                        res = -1;
                    }
                }
                else
                {
                    if (string.IsNullOrWhiteSpace(y))
                    {
                        res = 1;
                    }
                    else
                    {
                        // C'est moche, on peut faire plus performant, c'est pour l'exemple :p
                        res = x.Split('/')[Column].CompareTo(y.Split('/')[Column]);
                    }
                }
     
                if (Asc) return res;
                else return -res;
            }
        }
    }

    Ce qui donne :
    Liste non triée
    Ma belle liste :
    toto/48/155/titi
    tutu/21/210/88
    lulu/85/555/4re

    Liste avec tri par défaut
    Ma belle liste :
    lulu/85/555/4re
    toto/48/155/titi
    tutu/21/210/88

    Liste avec tri par la troisième colonne décroissante
    Ma belle liste :
    lulu/85/555/4re
    tutu/21/210/88
    toto/48/155/titi

    Liste avec tri par la quatrième colonne croissante
    Ma belle liste :
    lulu/85/555/4re
    tutu/21/210/88
    toto/48/155/titi
    On ne jouit bien que de ce qu’on partage.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 82
    Points : 47
    Points
    47
    Par défaut
    Un grand merci

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

Discussions similaires

  1. récupérer la partie commune d'une liste de String
    Par Kanter dans le forum Delphi
    Réponses: 11
    Dernier message: 18/04/2007, 12h46
  2. Créer un tableau de liste de string
    Par nobeone dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 06/04/2007, 14h58
  3. Réponses: 23
    Dernier message: 08/06/2006, 15h06
  4. [VB.net] Join d'un Array list de string?
    Par the_bmo dans le forum VB.NET
    Réponses: 8
    Dernier message: 15/12/2005, 13h53
  5. Comparaison d'une liste de string à un string
    Par maxazac dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 19/10/2005, 15h39

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