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 :

[VB.NET 2.0]Quelle meilleure façon de parcourir ArrayList?


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Février 2004
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 79
    Par défaut [VB.NET 2.0]Quelle meilleure façon de parcourir ArrayList?
    Pour parcourir une collection (arrayList dans mon cas), il y a les trois méthodes suivantes :

    - Avec l'index de l'item
    - Avec For Each
    - Avec l'objet IEnumerator

    Bon, c'est bien tout ça, mais c'est quoi l'avantage d'utiliser plus une méthode qu'une autre ? En utilisant For Each, est-ce que ça va les passer dans l'ordre indexé ? Est-ce plus rapide avec l'enumerator?

    Pour l'instant, j'utilise toujours la première méthode.

    Merci

  2. #2
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Je vote pour la simplicité du For Each. Pour ma part, le vrai souci avec un Arraylist c'est le fait de récupérer un objet non typé. Ayant le framework 2.0, pourquoi se priver des générics ?

  3. #3
    Membre expérimenté Avatar de del-dongo
    Inscrit en
    Mai 2003
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 147
    Par défaut
    le foreach n'est qu'une facilité du langage, derrière il n'y a rien d'autre que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       IEnumerator.MoveNext()
    donc pour la simplicité, c'est vrai, le foreach...
    ps : il apparaitrait qu'une boucle for serait plus appropriée si l'on recherche de hautes performances, mais dans la majorité des cas il n'y a presque pas de différrences....

  4. #4
    Membre Expert
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Par défaut
    Ienumerator et For each c'est idem

    Apres lequel choisir, bin tout depend du code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    For i=0 to n
        Collec(i).truc = b
        Collec(i).bidule = c
        Collec(i).fairekekchose
        Collec(i).truc = c
        Collec(i).machin = d
    Next
    Bin la forcement on repasse a chaque fois par l'appel a la collection, la recup de l'objet par son index: dans ce cas vallait mieux faire un for each

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    For Each truc in Collec
        truc.fairekekchose
    Next
    Rappatrier une reference dans truc pour fairekekchose n'est pas utile. Vallait mieux passer par l'index dans ce cas ci.

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Par défaut
    Citation Envoyé par Piotrek
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For i=0 to n
        Collec(i).truc = b
        Collec(i).bidule = c
        Collec(i).fairekekchose
        Collec(i).truc = c
        Collec(i).machin = d
    Next
    Bin la forcement on repasse a chaque fois par l'appel a la collection, la recup de l'objet par son index: dans ce cas vallait mieux faire un for each
    Là de toute façon, la première chose à faire est de déclarer une variable à la première ligne pour récupérer l'objet directement. La duplication, c'est Mal :)
    (et là c'est aussi un exemple de méthode manquante sur la classe des objets contenus dans la collection :)

    Citation Envoyé par Piotrek
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each truc in Collec
        truc.fairekekchose
    Next
    Rappatrier une reference dans truc pour fairekekchose n'est pas utile. Vallait mieux passer par l'index dans ce cas ci.
    Pas spécialement utile non plus. Il n'y a pas de différence de perfs et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach ( Bleh truc in machins )
    {
      truc.Chose();
    }
    est toujours plus lisible que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for ( int i = 0 ; i < machins.Count ; ++i )
    {
      machins[i].Chose();
    }
    Le plus utile des deux est le plus lisible. Et le for gagne rarement à ce jeu :)

    De manière générale, si on a juste à parcourir linéairement, du premier au dernier, sans avoir besoin de l'index -> foreach.
    Si on a besoin de l'index, qu'on ne va pas de un en un ou qu'on ne démarre pas du début -> for.

    De manière encore plus générale, tant que foreach fait l'affaire -> foreach.
    Quand on tombe sur un cas où ça ne va pas, on utilise autre chose.

    La question des performances est complètement ignorable.

  6. #6
    Membre Expert
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Par défaut
    La question des performances est complètement ignorable.
    Tolérable, nuance! on ignore pas: on tolère

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Par défaut
    Citation Envoyé par Piotrek
    La question des performances est complètement ignorable.
    Tolérable, nuance! on ignore pas: on tolère :P
    On ignore jusqu'à ce que ça pose un problème. Et le commun des mortels ne verra probablement jamais cette situation se produire. Donc on ignore, on n'y pense plus, et ça fait un peu plus de place dans le crâne pour stocker des choses vraiment utiles :)

    Où est le problème d'ignorer quelque chose de négligeable ? :)

  8. #8
    Membre Expert
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Par défaut
    Tu pars vraiement au 1/4 de tour

    Bien sur je suis d'accord, et j'en profite pour passer le lien qui va bien pour ceux qui connaissent pas:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag/html/scalenet.asp

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Par défaut
    Citation Envoyé par Piotrek
    Tu pars vraiement au 1/4 de tour :D
    1/8
    Mais juste 1/6 en fin de semaine :)

  10. #10
    Membre actif
    Inscrit en
    Février 2004
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 79
    Par défaut
    Ok, j'utilisais pas le For Each quand j'avais besoin de parcourir ma collection dans l'ordre des index, car me semble qu'une fois j'avais fait ça et le For Each n'avait pas parcouru ma collection dans l'ordre que je m'attendais.

    Mais si vous dites qu'un for Each va parcourir dans le même ordre qu'un for de 0 à .count - 1, ça fait mon affaire aussi.

    Merci pour les réponses

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 16/10/2008, 21h29
  2. Réponses: 10
    Dernier message: 25/09/2008, 08h49
  3. Réponses: 16
    Dernier message: 18/08/2008, 18h29
  4. Quelle est la meilleure façon de lisser un signal?
    Par regress dans le forum Traitement du signal
    Réponses: 16
    Dernier message: 06/02/2008, 12h36
  5. Réponses: 3
    Dernier message: 09/05/2006, 15h16

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