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 :

Syntaxe rapide pour une manipulation de List


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 198
    Points : 106
    Points
    106
    Par défaut Syntaxe rapide pour une manipulation de List
    Bonjour,

    J'ai un problème simple.
    J'ai par exemple un tableau (ou liste) d'un structure: FileInfo[] files.
    Je voudrais créer une List<String> contenant tout les noms de fichiers contenu dans le tableau.

    Existerait il une syntaxe particulière pour créer cette liste ?
    Sans devoir faire un foreach.

    Merci :-)



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class FileInfo
    {
       public string name;
       public string extension;
       ......
    }

  2. #2
    Membre éprouvé Avatar de worm83
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Février 2010
    Messages
    459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2010
    Messages : 459
    Points : 1 118
    Points
    1 118
    Par défaut
    Bonjour,

    L'utilisationde requettes Linq ou les expression lambda correspondent exactement a ce que tu recherche (a partir de .Net 3.5)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    //FileInfo[] fi
     
    var _li = (from _x in fi
                select _x.Nom).ToList();
    ou encore avec les expressions Lambda

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    //FileInfo[] fi
     
    var _li = fi.Select(x => x.Nom).ToList();
    http://code.msdn.microsoft.com/101-L...mples-3fb9811b

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 198
    Points : 106
    Points
    106
    Par défaut
    Super merci !!

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 198
    Points : 106
    Points
    106
    Par défaut
    De la même façon serait il possible de faire quelque chose de ce genre ? j’obtiens une erreur de cast.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    List<String> data = new List<string>();
                data = (from line in reader.ReadLine() select line);
    Merci

  5. #5
    Membre chevronné Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Points : 2 227
    Points
    2 227
    Par défaut
    Que veux-tu faire ?
    ReadLine() n'est pas une collection, et ne te renverra qu'un seul string correspondant à ta ligne...

    Si tu veux les mots de la dite ligne, tu peux par exemple faire :

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    List<String> data = reader.ReadLine().Split(new Char [] {' ', ',', '.', ':'}).ToList();

  6. #6
    Membre éprouvé Avatar de worm83
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Février 2010
    Messages
    459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2010
    Messages : 459
    Points : 1 118
    Points
    1 118
    Par défaut
    +1 pour la la reponse der3van

    Ressource MSDN Linq To Object

  7. #7
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Si tu veux lire un stream tu peux essayer ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Enumerable.Range(0, int.MaxValue).TakeWhile (e => !reader.EndOfStream).Select (e => reader.ReadLine())

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 198
    Points : 106
    Points
    106
    Par défaut
    Je cherchais à créer une liste de string, dont chaque élément correspond à une ligne du fichier avec une syntaxe se rapprochant de LINQ comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    List<String> data = new List<string>();
                data = (from line in reader.ReadLine() select line);
    Je pense que c'est ce que Nathanael a proposé(?) mais cela me semble bien compliqué à déchiffrer et donc un peu moins lisible, ou alors c'est moi qui n'ait pas assez d'expériences dans ces syntaxes.

  9. #9
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Enumerable.Range(0, int.MaxValue) créé une boucle très très grande (qui s'execute plus de 2 milliards de fois). A chaque itération, il vérifie si le reader n'est pas en EndOfStream (auquel cas on arrête et on sort de la boucle) et si on peut continuer alors on lit la prochaine ligne. Ca ne marche pas si ton fichier fait plus de 2 milliards de lignes.
    Ce qui revient à peu près à ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while(!reader.EndOfStream)
    {
        data.Add(reader.ReadLine());
    }

  10. #10
    Membre chevronné Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Points : 2 227
    Points
    2 227
    Par défaut
    Citation Envoyé par AsPrO Voir le message
    Je cherchais à créer une liste de string, dont chaque élément correspond à une ligne du fichier avec une syntaxe se rapprochant de LINQ comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    List<String> data = new List<string>();
                data = (from line in reader.ReadLine() select line);
    Je pense que c'est ce que Nathanael a proposé(?) mais cela me semble bien compliqué à déchiffrer et donc un peu moins lisible, ou alors c'est moi qui n'ait pas assez d'expériences dans ces syntaxes.
    Etant donné que ReadLine() ne te retournera qu'une ligne, ce n'est pas possible avec une structure comme tu la proposes.
    En fait, tu n'as pas d'autre choix que de boucler sur ReadLine() si tu veux traiter ligne par ligne.

    Du coup, les deux propositions de Nathanael se valent, même si je pense que la seconde s'exécutera plus vite (car pas d'expression lambda); c'est surtout une question de formalisme.
    Si tu veux absolument du Linq, prends la première.
    Si c'était juste pour avoir quelque chose de lisible, je pense qu'ici le gain est... minime, voire nul.

Discussions similaires

  1. Syntaxe élégante pour une fusion de compréhension de liste
    Par sopsag dans le forum Général Python
    Réponses: 8
    Dernier message: 23/08/2010, 12h22
  2. Langage le plus rapide pour une application web ?
    Par beninsky dans le forum Débuter
    Réponses: 2
    Dernier message: 04/05/2010, 21h29
  3. Quelle est la syntaxe précise pour une foreign key ?
    Par vinze60 dans le forum Requêtes
    Réponses: 3
    Dernier message: 07/09/2009, 09h45
  4. Syntaxe fausse pour une version 3.23
    Par megane dans le forum Requêtes
    Réponses: 4
    Dernier message: 07/09/2006, 09h26
  5. problème de syntaxe delphi pour une requête sql
    Par socooooool dans le forum Bases de données
    Réponses: 12
    Dernier message: 07/07/2006, 16h53

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