La fameuse boucle "For Each... Next"

La fameuse boucle "For Each... Next" - VB/VBA/VBS - Programmation

Marsh Posté le 10-06-2016 à 17:24:07    

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:

Reply

Marsh Posté le 10-06-2016 à 17:24:07   

Reply

Marsh Posté le 11-06-2016 à 20:20:32    

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

Reply

Marsh Posté le 12-06-2016 à 09:06:30    

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.

Reply

Marsh Posté le 12-06-2016 à 09:48:17    

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.

Reply

Marsh Posté le 12-06-2016 à 12:35:02    

 
            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 !
  

Reply

Marsh Posté le 13-06-2016 à 07:53:29    

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:  

Reply

Marsh Posté le 13-06-2016 à 10:59:22    

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

Reply

Marsh Posté le 14-06-2016 à 14:34:37    

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

Reply

Marsh Posté le 15-06-2016 à 11:01:51    

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
Reply

Marsh Posté le 15-06-2016 à 19:44:48    

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: ).

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed