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

VB.NET Discussion :

Liste contenant une liste?


Sujet :

VB.NET

  1. #1
    Membre régulier

    Profil pro
    Inscrit en
    Août 2006
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 213
    Points : 103
    Points
    103
    Par défaut Liste contenant une liste?
    Bonjour,
    J'ai un petit soucis concernant l'utilisation d'une liste.
    Voici la délaration initiale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Dim maille As New List(Of GrandeurPhysique)
        Dim liste_mailles As New List(Of List(Of GrandeurPhysique))
    J'ai une boucle qui recopie chaque nouvelle maille dans la liste_mailles.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                liste_mailles.Add(maille)
                maille.Clear()
    Le soucis est que quand j'ajoute une nouvelle maille, elle s'ajoute bien dans la liste_mailles, mais elle vient aussi remplacer celles d'avant.
    Par exemple, à la 1ere boucle ma maille comprend 5 GrandeurPhysique. Elle est correctement ajoutée dans liste_mailles qui comprend bien 1 maille de 5 GrandeurPhysique.
    Par contre, à la boucle suivante, j'ajoute une nouvelle maille qui comprend 7 GrandeurPhysique, et la quand je regarde le contenu de liste_mailles, il m'indique 2 mailles de 7 valeurs.

  2. #2
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Quand tu ajoutes ta liste à ta liste de liste ; ce que tu ajoutes en réalité c'est une référence à cette liste (grossièrement un pointeur qui dit "elle se trouve là").
    Comme à chaque fois il s'agit de la même référence tous les éléments de ta liste sont des références au même objet.
    Dans ton extrait de code on voit un Clear après l'ajout ; tu pourrais déjà constater que ta liste de liste contient un élément mais vide (à cause du Clear juste effectuée qui a donc effacée ta liste et quand tu te référence à cette instance via ta liste de liste tu accèdes au même objet).

    Pour résoudre le problème il faut tu acquières une nouvelle référence en faisant maille = New List(Of GrandeurPhysique) en lieu et place du Clear par exemple.
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  3. #3
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Salut,

    Avec le code suivant (C#) je n'ai aucun souci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    string List<List<string>> superList = new List<List<string>>();
     
    string List<string> list1 = new List<string>();
    list1.Add("tata");
    list1.Add("toto");
     
    string List<string> list2 = new List<string>();
    list2.Add("kiki");
    list2.Add("kuku");
     
    superList.Add(list1);
    superList.Add(list2);
    Soit y'a une spécificité de VB à prendre en compte, soit le souci vient de quelque part dans ton code.

    PS : il me semble que le Add() fait une copie de référence, si tu Clear() ta liste, celle ajoutée dans ta "super-liste" sera aussi vide.
    Plus je connais de langages, plus j'aime le C.

  4. #4
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par jopopmk Voir le message
    PS : il me semble que le Add() fait une copie de référence, si tu Clear() ta liste, celle ajoutée dans ta "super-liste" sera aussi vide.
    Je plussois , si l'élément ajouté est de type référence !


  5. #5
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Comme maille est une classe, alors il ne peut s'agir que d'une référence.
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  6. #6
    Membre régulier

    Profil pro
    Inscrit en
    Août 2006
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 213
    Points : 103
    Points
    103
    Par défaut
    Merci beaucoup, en effet après avoir remplacé "maille.clear" par "maille = New List(Of GrandeurPhysique)", cela fonctionne parfaitement.

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

Discussions similaires

  1. [Lisp][IA] Supprimer une liste d'une liste de listes
    Par Superleo2999 dans le forum Lisp
    Réponses: 5
    Dernier message: 22/03/2010, 10h51
  2. Trier une liste contenant une paire ?
    Par Muetdhiver dans le forum C++
    Réponses: 6
    Dernier message: 01/04/2009, 22h42
  3. Réponses: 12
    Dernier message: 03/12/2007, 18h53
  4. Appel d'une liste dans une liste (JSTL)
    Par abalgue dans le forum Hibernate
    Réponses: 4
    Dernier message: 15/06/2007, 10h56
  5. STL : retirer une liste d'une liste
    Par DEVfan dans le forum SL & STL
    Réponses: 13
    Dernier message: 05/01/2007, 20h49

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