对于VB.NET中2D阵列上的每个循环

jay*_*yli 8 vb.net iteration foreach multidimensional-array

我正在编写一个循环来遍历2D循环的第一个数组,我现在有这样的:

For Each Dir_path In MasterIndex(, 0)
    'do some stuff here
Next
Run Code Online (Sandbox Code Playgroud)

但它给了我一个错误,说它希望在第一个字段中有一个表达式.但这就是我想要做的,循环通过第一个字段.我该如何解决?我会在那里放什么?

编辑:澄清一下,我特意在每个数组的子数组中寻找第0个元素,这就是第二个字段始终为0的原因.

Jos*_*and 16

您可以使用嵌套的For循环来完成此操作

注意:使用For Each循环迭代数组中的元素时,每次迭代生成的占位符都是实际数组中值的副本.对该值的更改不会反映在原始数组中.如果您想要执行除读取信息之外的任何操作,则需要使用For循环直接寻址数组元素.

假设二维数组,以下代码示例将为每个维度中的每个元素分配一个值.

Dim MasterIndex(5, 2) As String

For iOuter As Integer = MasterIndex.GetLowerBound(0) To MasterIndex.GetUpperBound(0)
  'iOuter represents the first dimension
  For iInner As Integer = MasterIndex.GetLowerBound(1) To MasterIndex.GetUpperBound(1)
    'iInner represents the second dimension
    MasterIndex(iOuter, iInner) = "This Isn't Nothing" 'Set the value
  Next 'iInner

  'If you are only interested in the first element you don't need the inner loop
  MasterIndex(iOuter, 0) = "This is the first element in the second dimension"
Next 'iOuter
'MasterIndex is now filled completely
Run Code Online (Sandbox Code Playgroud)

您可以选择使用该.Rank属性动态迭代每个维度

如果你想循环一个锯齿状的数组,就像Konrad Rudolph所建议的那样(这个函数更接近地匹配其他更松散类型的语言,如PHP的数组实现),你可以这样做:

'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
Run Code Online (Sandbox Code Playgroud)