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

Linq Discussion :

créer une expression lambda pour filtrer un tableau [Débutant]


Sujet :

Linq

  1. #1
    Membre habitué
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Janvier 2005
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 534
    Points : 188
    Points
    188
    Par défaut créer une expression lambda pour filtrer un tableau
    bonjour

    j'ai un tableau du style
    dans lequel je veux supprimer des valeurs
    en fait j'opterai pour filtrer les valeur et les remettre dans un nouveaux tableau "NT",

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach (var VersionZips in versionZips)
    {
         NT = VersionZip => SiEstBon(VersionZip);
    }
    SiEstBon est une fonction qui me renvoit True ou False
    Je veux conserver les True, bien sûr ...

    mais je n'ai pas la bonne syntaxe

    NT est un tableau de strings
    VersionZip est 1 string
    il me dit qu'il ne peut pas convertir un string en un tableau

    je devrai essayer avec des shorty ?

    quelle serait la bonne méthode svp ?
    je cherche en //

  2. #2
    Membre habitué
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Janvier 2005
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 534
    Points : 188
    Points
    188
    Par défaut
    j'ai pris un tableau de strings
    c'est peut-être mieux avec une liste, du style :

    mais je n'ai pas réussi à remplir une List avec la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<String> LZip =  Directory.GetDirectories(stringPath)
    alors que marche bien avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String[] LZip =  Directory.GetDirectories(stringPath)
    j'aurai alors pu profiter de la méthode ".where " ... peut-être pour mon expression Lambda comme ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    customers.Where(c => c.City == "London");
    bon je cherche ...

  3. #3
    Membre éprouvé
    Avatar de dkmix
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    619
    Détails du profil
    Informations personnelles :
    Localisation : Jamaïque

    Informations forums :
    Inscription : Septembre 2007
    Messages : 619
    Points : 924
    Points
    924
    Par défaut
    Bonjour,
    Vous pouvez utiliser Array.FindAll
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            string[] Personnes = { "Pierre", "Paul", "Jack" };
            string[] PersonnesCommencantParP = Array.FindAll<string>(Personnes, p => p.StartsWith("P"));

  4. #4
    Membre habitué
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Janvier 2005
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 534
    Points : 188
    Points
    188
    Par défaut
    merci, ça devrait fonctionner
    Pour tester, je dois encore voir le "déploiement" de mon service, sur un autre poste "server"
    Du coup je reviendrai ici pour signaler les éventuels soucis rencontrés

  5. #5
    Membre habitué
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Janvier 2005
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 534
    Points : 188
    Points
    188
    Par défaut
    Citation Envoyé par dkmix Voir le message
    Bonjour,
    Vous pouvez utiliser Array.FindAll
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            string[] Personnes = { "Pierre", "Paul", "Jack" };
            string[] PersonnesCommencantParP = Array.FindAll<string>(Personnes, p => p.StartsWith("P"));
    Retour :

    mon code corrigé serait alors :

    Code : 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
     
    ...
    private byte boff; 
    private string folder; 
     
    ...
            private void FillInVersionFileList(string[] VersionZips)
            {
                foreach (var versionZip in VersionZips)
                {
                    // Split the directory
                    boff = Convert.ToByte(versionZip.LastIndexOf('\\'));
                    folder = versionZip.Substring(boff + 1);
                }
     
                string[] cleanVerZip = Array.FindAll<string>(VersionZips, p => p.StartsWith(@"v."));
     
            }
    le 1er foreach est maladroit je pense.
    Il sert à ne conserver que le nom du dossier, tout dossier confondu

    1 - Peut-être une autre expression lambda me paraitrait plus adéquate, si j'y arrive ...

    2 - ensuite, je désirerais extraire du code, la "validation" : StartsWith(@"v.") pour en faire une "fonction" réutilisable. Mais je m'y prends mal aussi; pas encore le bon réflexe pour les expressions lambda :

    Voici ce que je désirais faire et qui ne fonctionne pas, en partant de mon dernier code, corrigé.

    Remplacer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string[] cleanVerZip = Array.FindAll<string>(VersionZips, p => p.StartsWith(@"v."));
    Par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     string[] cleanVerZip = Array.FindAll<string>(VersionZips, p => IsVersion(p));

    et :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            private Boolean IsVersion(string x)
            {
                return (!String.IsNullOrEmpty(x) && x.StartsWith(@"v."));
    
            }
    Il me met le message :
    "Convert to Method Group" !!! en soulignant "p => IsVersion(p)"

    je cherche ...

  6. #6
    Membre habitué
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Janvier 2005
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 534
    Points : 188
    Points
    188
    Par défaut
    Citation Envoyé par dkmix Voir le message
    Bonjour,
    Vous pouvez utiliser Array.FindAll
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            string[] Personnes = { "Pierre", "Paul", "Jack" };
            string[] PersonnesCommencantParP = Array.FindAll<string>(Personnes, p => p.StartsWith("P"));
    Je ne comprends pas le lien entre Personnes et P, à gauche dans l'expression Lambda ...

    Pourquoi le compilateur fait-il un lien et sait (devine) que p est une Personne, dans ton exemple ?

    vivement que je puisse tester

  7. #7
    Membre éprouvé
    Avatar de dkmix
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    619
    Détails du profil
    Informations personnelles :
    Localisation : Jamaïque

    Informations forums :
    Inscription : Septembre 2007
    Messages : 619
    Points : 924
    Points
    924
    Par défaut
    "Convert to Method Group" c'est un message de ReShaper pas de VS.

    Pourquoi le compilateur fait-il un lien et sait (devine) que p est une Personne, dans ton exemple ?
    p est un "string" le compilateur le sait car Array.FindAll<T>(...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public static T[] FindAll<T>(
    	T[] array,
    	Predicate<T> match
    )

  8. #8
    Membre habitué
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Janvier 2005
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 534
    Points : 188
    Points
    188
    Par défaut
    merci

    désolé pour le message de Resharper ... hors sujet
    Ok pour le type de P ... je dois revoir mes cours

    me débrouille pour la suite, merci

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

Discussions similaires

  1. [Débutant] passer d'un tableau à une liste dans une expression lambda
    Par Hepil dans le forum Linq
    Réponses: 8
    Dernier message: 25/06/2013, 17h23
  2. Réponses: 2
    Dernier message: 09/08/2010, 15h41
  3. [AJAX] Créer une interface web pour un programme Java
    Par Wookai dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 30/03/2006, 10h10
  4. Réponses: 10
    Dernier message: 02/11/2005, 11h12
  5. [9.2i] Créer une dimension temps pour un DWH
    Par alpachico dans le forum Oracle
    Réponses: 5
    Dernier message: 28/10/2005, 15h00

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