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 :

Itération dans une liste


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 61
    Par défaut Itération dans une liste
    Bonjour,

    Es-ce possible, en itérant dans une liste, de modifier l'élément courant, sans utiliser les indices?

    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    For Each strNom as String In monArrayList
     
      Console.Writeline("le nom est: " & strNom)
     
      strNom = strNom.ToUpper()
     
      ' Et ici j'aimerais mettre à jour la valeur dans l'arraylist.
     
    Next
    Je comprend que ça se fait en utilisant des indices, mais avec la nouvelle façon For?

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 206
    Par défaut
    Bonjour,

    Sans utiliser les index, tu peut faire ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    monArrayList.Item(monArrayList.IndexOf(strNom)) = strNom.ToUpper()
    Mais tu ne peux pas le faire dans la boucle puisque tu modifies la collection
    sauf si tu fais un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    For i as integer = 0 to monArrayList.count -1
    mais dans ce cas là, aucun interet pour toi de me pas utiliser les index.
    Donc a priori non, c'est pas possible.
    Tu pourrais passer par un ArrayList temporaire que tu copie dans ta boucle et que tu affectes a monArrayList après la boucle. beaucoup de manip pour a mon avis pas grand chose.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Avec un foreach tu ne peux pas faire ça. Ca te renvoie successivement toutes les valeurs de la collection, mais tu ne peux pas les remplacer.

    A priori tu es obligé de passer par l'index. En quoi est-ce un problème ?

    Citation Envoyé par dudule Voir le message
    Sans utiliser les index, tu peut faire ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    monArrayList.Item(monArrayList.IndexOf(strNom)) = strNom.ToUpper()
    Euh... là tu utilises un index !

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 206
    Par défaut
    Quand je parlais d'index, c'etait avec un entier qui s'incrémente du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim i as Integer 
    For i = 0 to MaCollection.Count -1 
    MaCollection(i)....
    Donc dans l'exemple que j'ai donné, on gardait le For Each initiale qui a priori doit rester comme ca.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par dudule Voir le message
    Quand je parlais d'index, c'etait avec un entier qui s'incrémente du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim i as Integer 
    For i = 0 to MaCollection.Count -1 
    MaCollection(i)....
    Donc dans l'exemple que j'ai donné, on gardait le For Each initiale qui a priori doit rester comme ca.
    Ah ok... mais n'empêche, c'est super inefficace ! Ca donne un algo avec une complexité en o(n²) au lieu de o(n), ce qui est totalement inacceptable pour une liste avec beaucoup d'éléments.

  6. #6
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 61
    Par défaut
    Ok merci.

    Il n'y a pas de problème à utiliser les index, mais je me disais qu'il y avait peut-être une autre solution.

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

Discussions similaires

  1. [LG]Tri par insertion dans une liste chainée
    Par mister_dsg dans le forum Langage
    Réponses: 4
    Dernier message: 18/12/2003, 22h34
  2. [LG]suppression dans une liste chainée
    Par mister_dsg dans le forum Langage
    Réponses: 9
    Dernier message: 16/12/2003, 21h20
  3. [langage] Comment rajouter des champs dans une liste
    Par toto_titi dans le forum Langage
    Réponses: 4
    Dernier message: 28/08/2003, 14h09
  4. Réponses: 2
    Dernier message: 17/08/2003, 20h07
  5. Réponses: 4
    Dernier message: 24/04/2003, 22h28

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