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 :

[LINQ To Object] Sous-ensemble d'une liste


Sujet :

Linq

  1. #1
    Membre du Club
    Inscrit en
    Février 2004
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 70
    Points : 45
    Points
    45
    Par défaut [LINQ To Object] Sous-ensemble d'une liste
    Bonjour,

    je souhaiterai savoir s'il était possible de récupérer un sous-ensemble d'une liste.

    Je m'explique.

    Considérons la liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    List<int> Source = new List<int>();
    On trouve dans cette liste la chose suivante
    je souhaite savoir si le sous-ensemble par exemple existe.

    Comment faire ?

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de Paul Musso
    Profil pro
    Inscrit en
    Août 2008
    Messages
    368
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2008
    Messages : 368
    Points : 443
    Points
    443
    Par défaut
    Bonjour,

    C'est pas extraordinaire mais je peux te proposer cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    List<int> liste = new List<int>() { 2, 3, 4, 5, 6, 7 };
    List<int> listeATrouver = new List<int> { 4,5,6 };
    bool resultat = liste.Where(i => listeATrouver.Contains(i)).SequenceEqual(listeATrouver);
    En tout cas, ça marche. Il existe peut-être quelque chose de plus optimisé.

  3. #3
    Rédacteur
    Avatar de Paul Musso
    Profil pro
    Inscrit en
    Août 2008
    Messages
    368
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2008
    Messages : 368
    Points : 443
    Points
    443
    Par défaut
    Oups, mon exemple ne fonctionne pas vraiment ...

    J'essaie de trouver mieux dès que j'ai un peu de temps

  4. #4
    Rédacteur
    Avatar de Paul Musso
    Profil pro
    Inscrit en
    Août 2008
    Messages
    368
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2008
    Messages : 368
    Points : 443
    Points
    443
    Par défaut
    Bon,
    Avec les méthodes d'extensions fournies par Linq c'est pas vraiment évident de savoir si une liste quelconque contient une sous liste, alors j'ai créé 2 méthodes d'extensions aidant à cela, et voici un petit exemple :

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    class Program
    {
        static void Main(string[] args)
        {
            List<int> liste = new List<int>() { 2, 3, 4, 5, 6, 7 };
            List<int> listeATrouver = new List<int> { 4,5,6 };
     
            bool resultat = liste.ContainsSubSequence(listeATrouver);
        }
     
    }
     
    public static class Extensions    
    {
        public static bool ContainsSubSequence<T> (this IEnumerable<T> pListe, IEnumerable<T> pSubListe)
        {
            foreach (int index in pListe.FindAllIndexes(entier => entier.Equals(pSubListe.First())))
            {
                if (pListe.ToList().GetRange(index, pSubListe.Count()).SequenceEqual(pSubListe))
                    return true;
            }
            return false;
        }
     
        public static List<int> FindAllIndexes<T>(this IEnumerable<T> pListe, Func<T,bool> pPredicat)
        {
            List<int> liste = new List<int>();
     
            int index=0;
            foreach (T entier in pListe)
            {
                if (pPredicat(entier))
                    liste.Add(index);
                index++;
            }
            return liste;
        }
     
    }
    Le code m'a bien l'air de fonctionner. Je pense qu'on peut l'optimiser aussi ...

  5. #5
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Beaucoup plus simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    List<int> liste = new List<int>() { 2, 3, 4, 5, 6, 7 };
    List<int> listeATrouver = new List<int> { 4, 5, 6 };
     
    bool res = listeATrouver.All(i => liste.Contains(i));
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  6. #6
    Rédacteur
    Avatar de Paul Musso
    Profil pro
    Inscrit en
    Août 2008
    Messages
    368
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2008
    Messages : 368
    Points : 443
    Points
    443
    Par défaut
    Euh, je veux pas dire, mais ca respecte pas du tout l'ordre de la sous liste ...

  7. #7
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par Paul Musso Voir le message
    Euh, je veux pas dire, mais ca respecte pas du tout l'ordre de la sous liste ...
    Ah oups j'avais pas vu qu'il y avait cette contrainte.
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

Discussions similaires

  1. sous ensemble dans une liste
    Par philippe6 dans le forum Débuter avec Java
    Réponses: 26
    Dernier message: 18/03/2013, 15h42
  2. Sous formulaire lié à une liste déroulante
    Par Spanish_ dans le forum IHM
    Réponses: 4
    Dernier message: 23/10/2007, 15h14
  3. sous ensembles & permutation de liste
    Par LlufRuS dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 06/12/2006, 10h22
  4. Réponses: 13
    Dernier message: 23/06/2006, 12h12
  5. sous ensemble d'une liste
    Par adel25 dans le forum C++
    Réponses: 1
    Dernier message: 23/08/2005, 15h50

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