9
votes

Pour chaque boucle sur un tableau 2D dans vb.net

J'écris une boucle pour traverser la première gamme d'une boucle 2D, et je l'ai actuellement comme ça:

For Each Dir_path In MasterIndex(, 0)
    'do some stuff here
Next


1 commentaires

J'ai mis à jour les deux exemples pour tenir compte de votre demande plus détaillée


3 Réponses :


1
votes

Vous ne pouvez tout simplement pas. Les tableaux multidimensionnels ne sont pas vraiment pris en charge dans l'infrastructure-cadre .NET. Ils semblent être étiquetés comme une réflexion après coup. La meilleure solution est souvent de ne pas les utiliser et d'utiliser des matrices déchiquetées (réseaux de tableaux - entier () () au lieu de entier (,) ).


2 commentaires

Donc, je l'ai changé en MasterIndex () () mais quand je remplace pour chaque dir_path en MasterIndex (, 0) avec pour chaque dir_path in masterindex () (0) i get Nombre d'indices est inférieur au nombre de dimensions de la matrice indexée ?


@Tim que la syntaxe est simplement invalide. Utilisez pour chaque x dans MasterIndex ... Dirpath = x (0) et travaille de là ...



16
votes

Vous pouvez y accomplir avec des boucles imbriquées pour des boucles

Remarque: lorsque vous utilisez un pour chaque boucle pour itérer sur des éléments sur un tableau, l'espace réservé généré sur chaque itération est une copie de la valeur dans le tableau. Les modifications apportées à cette valeur ne seront pas reflétées dans la matrice d'origine. Si vous souhaitez faire autre chose que de lire les informations, vous devez utiliser une boucle pour adresser directement les éléments de matrice directement. P>

supposant une matrice de deux dimensions L'exemple de code suivant affectera une valeur à chaque élément de chaque dimension. p> xxx pré>

Vous pouvez éventuellement utiliser la propriété .Rank code> pour itérer dynamiquement chaque dimension p>

si vous voulez Boucle sur un tableau déchiqueté comme Konrad Rudolph suggérait (cela correspond fonctionnellement plus étroitement des mises en œuvre dans d'autres langages dactylographiés plus vaguement tels que PHP), vous pouvez y parvenir comme: p>

'This is a jagged array (array of arrays) populated with three arrays each with three elements
Dim JaggedIndex()() As String = {
  New String() {"1", "2", "3"},
  New String() {"1", "2", "3"},
  New String() {"1", "2", "3"}
}

For Each aOuter As String() In JaggedIndex
  'If you are only interested in the first element you don't need the inner for each loop
  Dim sDesiredValue As String = aOuter(0) 'This is the first element in the inner array (second dimension)

  For Each sElement As String In aOuter
    Dim sCatch As String = sElement 'Assign the value of each element in the inner array to sCatch
    sElement = "This Won't Stick" 'This will only hold value within the context of this loop iteration
  Next 'sElement
Next 'aOuter
'JaggedIndex is still the same as when it was declared


0 commentaires

1
votes

Vous pouvez utiliser Énumérable.Range récursivement pour itérer les dimensions d'un tableau.

permet de dire que nous avons une grille de deux dimensions (rangées et colonnes) de Int.

Nous pouvons l'iter comme suit: xxx

La logique peut être appliquée à n'importe quel nombre de dimensions.


0 commentaires