2010-07-24 5 views
1

Je voudrais parcourir deux listes en utilisant une boucle Pour chaque boucle.vb.net Pour chaque boucle

dim data as list(of pointpairlist) 
For each recLine in records 
    For Each chan In recLine.channels and d in data 
     d.add(func(chan)) 
    Next 
next 

note: chaque ligne d'enregistrement a un échantillon de chaque canal enregistré. c'est-à-dire que chaque ligne d'enregistrement est une tranche de 32 enregistrements de capteurs. Je veux construire la hache, la liste y des points de données pour chaque canal (l'axe x est commun à tous les canaux)

Est-il possible de le faire semblable à ce que j'ai ci-dessus (en évitant les variables d'indexation)

Répondre

2

Le meilleur moyen d'itérer sur deux collections différentes dans une même boucle consiste à utiliser des indexeurs.

For index As Integer = 0 To recLine.channels.Count - 1 
    data(index) = func(chan(index)) 
Next 

Comme @ 0xA3 commentaires, vous pouvez aussi une boucle while, appelant GetEnumerator, MoveNext et Current directement sur chaque collection, mais cela vous apporte rien. Je réalise que vous voulez éviter d'utiliser des indexeurs, mais il n'y a pas de support de langage simple pour autre chose.

Ceci est également le cas pour C#.

Pourquoi avez-vous besoin d'éviter les indexeurs?

+1

Eh bien, vous * * utiliser pourrait une boucle while et appeler '' GetEnumerator' et MoveNext' et 'Current' vous, si vous vraiment envie d'éviter un indexeur. Cela devrait bien fonctionner si les listes ont la même taille mais cela ne vous donne pas vraiment un avantage. –

+0

@ 0xA3 - merci pour la perspicacité, réponse mise à jour. – Oded

+0

Eh bien, c'était un mélange d'essayer d'avoir moins d'encombrement, et sachant que je ne connais vraiment pas toutes les constructions dans vb.net ainsi. Je code généralement sur vb.net comme s'il s'agissait de C ou C++, ce qui n'est probablement pas l'utilisation la plus efficace du langage. – michael

2

Nichez les boucles. Je ne peux pas désosser les déclarations réelles de l'extrait, mais quelque chose comme ceci:

Dim data As List(Of PointPairList) 
    ''... 
    For Each point In data 
     For Each chan In point.recLine 
      func(chan) 
     Next 
    Next 
+0

ne fonctionne pas tout à fait parce que chaque "point" est en fait une liste de points peuplés par chaque canal (une liste de points pour chaque liste de canaux). Mais je sais que j'ai oublié quelque chose. Je vais éditer la question – michael

+0

Eh bien, quelque chose comme ça. Vous semblez avoir adopté l'approche de la boucle imbriquée. Pourquoi avez-vous choisi une réponse qui ne l'utilise pas? –

+0

Parce que c'est ce que j'ai fini par utiliser! :) – michael

Questions connexes