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

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    décembre 2006
    Messages
    373
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : décembre 2006
    Messages : 373
    Points : 125
    Points
    125
    Par défaut débutant : List<string> dupliquer la liste ?
    Bonjours,

    Si cette question est simple.

    Supprimer un élément de la liste: https://code-examples.net/fr/q/1824cd

    Vu la quantités de donnée 500'000 ou plus, il est plus simple de mettre les élément a garder dans une nouvelle liste temporaire. Du moins pour faire l'essai pour voire ce que cela donne en terme de performance.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    List<string>     ListN1;
    List<string>     ListN1_Buff;
    1.- On remplis ListN1

    par la suite dans une boucle for on trie les élément a garder de la ListN1 a ListN1_Buff

    chose faite. on efface ListN1.clear(); puis on réaffecte ListN1 = ListN1_Buff;

    Cela semblai bien marché sauf que.

    ListN1_Buff.clear(); PAF plus aucune donnée dans les 2 liste.

    j'ai bien 2 variable déclarée l'affectation ce fait bien par "=" qui ne laisse aucun doute.

    C'est la copie qui n'est pas correct. ou je dirait plutôt que ce n'est pas la bonne méthodes pour copier la liste dans une liste déjà existante, du moins je l'espère.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    janvier 2009
    Messages
    4 355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : janvier 2009
    Messages : 4 355
    Points : 10 299
    Points
    10 299
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     ListN1 = ListN1_Buff;
    Là tu ne copies pas le contenu des listes, les deux ne font plus qu'une. C'est équivalent d'une copie de pointeur en C.
    C'est une copie par référence, et non par valeur.
    Donc faire un .Clean sur l'une ou l'autre revient au même.
    Après cette affectation, la liste qui était ListN1_Buff n'est plus référencée, elle sera prise en charge par le garbage collector.

    Tatayo.

  3. #3
    Membre chevronné
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    janvier 2014
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : janvier 2014
    Messages : 506
    Points : 1 768
    Points
    1 768
    Par défaut
    Bonjour,

    Oui tu as bien vu, en faisant

    Tu ne fais que copier une référence a un seul et même objet en mémoire, la liste en question.

    Heureusement, pour cloner une liste c'est tout simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListN1_Buff = new List<string>(ListN1);
    Evidemment, petite mise en garde, tu as bien maintenant 2 listes bien distinctes, mais qui contiennent les mêmes éléments en mémoire.
    Keep calm and debug it

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    décembre 2006
    Messages
    373
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : décembre 2006
    Messages : 373
    Points : 125
    Points
    125
    Par défaut
    Ouf merci beaucoup pour vos réponse.

    Désormais je le saurai en espérant que cela puisse servir a d'autre . je me demande si sa ne devrai pas figurer dans la faq ce genre de souci ?

  5. #5
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    novembre 2010
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : novembre 2010
    Messages : 147
    Points : 149
    Points
    149
    Par défaut
    Je me permet de préciser qu'il est important de savoir que lorsqu'on fait une affectation d'objets, c'est le pointeur qui est affecté et non une copie de l'objet. Du coup, il y a 2 noms pour le même objet et ce qui est fait sur l'un, l'autre le subit également.

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

Discussions similaires

  1. [Débutant] Liste avec des valeurs associées aux string
    Par Bouillou dans le forum C++Builder
    Réponses: 3
    Dernier message: 16/03/2006, 19h11
  2. [débutante] Liste chainée/système expert
    Par zoune dans le forum Langage
    Réponses: 2
    Dernier message: 09/01/2006, 15h41
  3. [Struts] - débutante - liste déroulante
    Par alexx dans le forum Struts 1
    Réponses: 3
    Dernier message: 18/04/2005, 16h01
  4. Réponses: 10
    Dernier message: 04/05/2004, 17h00
  5. [ JSP ][ Débutant ] Liste déroulante + actualisation de page
    Par captainpouet dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 17/04/2004, 20h51

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