Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2576 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  La fameuse boucle "For Each... Next"

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

La fameuse boucle "For Each... Next"

n°2283480
marel
Posté le 10-06-2016 à 17:24:07  profilanswer
 

Salut all,
 
J'ai besoin de vos lumières  :)  
 
Pour faire rapide : J'ai besoin de faire une boucle "For Each..." avec la première itération différente du reste.
 
Est ce que c'est possible ?  
 
Merci beaucoup de votre temps  :jap:

mood
Publicité
Posté le 10-06-2016 à 17:24:07  profilanswer
 

n°2283497
Marc L
Posté le 11-06-2016 à 20:20:32  profilanswer
 

 
            Bonjour,
 
            même avec une explication claire & exhaustive je ne pense pas que ce soit possible !
 

n°2283498
leonhard
Posté le 12-06-2016 à 09:06:30  profilanswer
 

Marc L a écrit :

 
            Bonjour,
 
            même avec une explication claire & exhaustive je ne pense pas que ce soit possible !
 


 

Code :
  1. première_itération = true;
  2. for each element in ensemble do
  3.     if première_itération
  4.         faire quelque chose
  5.         première_itération = false;
  6.     else
  7.         faire quelque chose d'autre


 
 
Cela implique bien entendu que l'élément retourné par la première itération soit toujours le même et soit bien celui qu'on attend.

n°2283500
Trajet
Posté le 12-06-2016 à 09:48:17  profilanswer
 

Si le premier traitement est systématiquement différent des autres, foreach n'est pas la structure adaptée. En terme de complexité, il vaut mieux réaliser le premier traitement avant la boucle puis itérer à partir du deuxième élément avec un for pour ne pas se taper une évaluation inutile du if à chaque itération.

n°2283503
Marc L
Posté le 12-06-2016 à 12:35:02  profilanswer
 

 
            Bien vu leonHard mais je n'avais pas compris cela, comme quoi une présentation initiale claire n'est pas du luxe !
 
           « C'est simple ! » comme ils disent chez Renault …
 
           Et plus il y a d'éléments, plus je rejoins l'avis de Trajet !
  

n°2283542
leonhard
Posté le 13-06-2016 à 07:53:29  profilanswer
 

Marc L a écrit :

 
            Bien vu leonHard mais je n'avais pas compris cela, comme quoi une présentation initiale claire n'est pas du luxe !
 
           « C'est simple ! » comme ils disent chez Renault …
 
           Et plus il y a d'éléments, plus je rejoins l'avis de Trajet !
  


 
Ben mon bout de code montre qu'il y a peut-être une solution (encore que les conditions de l'OP ne sont pas claire), mais ce n'est pas parce qu'on peut le faire que c'est une bonne idée de le faire. Imaginons par exemple qu'un for-each parcoure tous les éléments d'un ensemble mais sans garantir l'ordre de parcours (on garantit juste que tous les éléments sont visités exactement une fois), ben c'est cuit. Il vaut mieux éviter le genre  de bricolage que j'ai proposé..  
 
Ou alors on lance un concours de celui qui trouve la solution la plus crade et inefficace possible pour ce problème  :sol:  

n°2283551
marel
Posté le 13-06-2016 à 10:59:22  profilanswer
 

Bonjour et merci pour vos réponses, je vais essayer d'adapter à mon problème :)  :jap:  
  :jap:

n°2283637
marel
Posté le 14-06-2016 à 14:34:37  profilanswer
 

Merci leonhard, ça marche bien avec une condition "If... Else... EndIf" :)

n°2283680
PierreC
Posté le 15-06-2016 à 11:01:51  profilanswer
 

Sauf que le if s'exécute à chaque itération alors qu'il n'est vrai qu'une fois. Pas très optimisé comme code et cela ajoute de la complexité cyclomatique.  
 
Mieux vaudrait comme le dit Trajet :  

Citation :

 
[...] réaliser le premier traitement avant la boucle puis itérer à partir du deuxième élément avec un for pour ne pas se taper une évaluation inutile du if à chaque itération.


---------------
Du tofu en Alsace : www.tofuhong.com
n°2283721
leonhard
Posté le 15-06-2016 à 19:44:48  profilanswer
 

PierreC a écrit :

Sauf que le if s'exécute à chaque itération alors qu'il n'est vrai qu'une fois. Pas très optimisé comme code et cela ajoute de la complexité cyclomatique.  
 
Mieux vaudrait comme le dit Trajet :  

Citation :

 
[...] réaliser le premier traitement avant la boucle puis itérer à partir du deuxième élément avec un for pour ne pas se taper une évaluation inutile du if à chaque itération.



 
 
Mouais, je ne connais pas VB[A-Z]* mais normalement n'importe quel optimisateur et JIT est capable de sortir ce code de la boucle de lui même sans rien avoir à demander.
Je suis entièrement d'accord que sortir le code "spécial" de la boucle est plus élégant dans le code source, mais si l'environnement ne propose pas automatiquement ce genre d'optimisation pour le code binaire, alors faut absolument retourner au gcc (ou mieux au "MIX" pour ceussent qui connaissent  :hello:  :pt1cable: ).


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  La fameuse boucle "For Each... Next"

 

Sujets relatifs
[RSOLU] [bash] while avec if/elif/fi qui tourne en boucleBoucle sur appel de Routine, VBA
BATCH, FOR/R rename fichier avec espace dans le nomCréation du boucle pour incrementation textbox
aide Inputbox pour saisie et boucleProblème de boucle infinie "cmd"
[VBA] Renseigner des signets Word dans une boucle For.PHPExcel comparaison cellules et boucle
Récupérer valeur dans un tableau avec boucle sous VBA 
Plus de sujets relatifs à : La fameuse boucle "For Each... Next"


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR