对于VB.NET中二维数组的每个循环



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

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

但是它给了我一个错误,说它期望在第一个字段中有一个表达式。但这就是我要做的,循环遍历第一个字段。我该如何解决这个问题?我该放什么进去呢?

编辑:为了澄清,我特别寻找每个数组的子数组中的第0个元素,这就是为什么第二个字段始终为0。

可以使用嵌套的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

您可以选择使用.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

你就是不能。多维数组在。net框架基础结构中并不真正支持。它们似乎是后来才加上的。最好的解决方案通常是不使用它们,而是使用锯齿数组(数组的数组- Integer()()而不是Integer(,))。

您可以使用Enumerable。递归范围以迭代数组的维度。

假设我们有一个Int型的二维网格(行和列)

可以这样迭代:

using System.Linq;
[TestMethod]
public void TestTwoDimensionalEnumeration()
{
    int rowcount = 9;
    int columncount = 9;
    int[,] grid = new int[rowcount, columncount];
    var enumerated =
        Enumerable.Range(0, rowcount - 1).
        SelectMany(ri => Enumerable.Range(0, columncount - 1).
        Select(ci => new {
                            RowIndex = ri,
                            ColumnIndex = ci,
                            Value = grid[ri,ci]
                         }));
    foreach (var item in enumerated)
    {
        System.Diagnostics.Trace.WriteLine("Row:" + item.RowIndex + 
                                          ",Column:" + item.ColumnIndex + 
                                          ",Value:" + item.Value);
    }
}

同样的逻辑可以应用于任意数量的维度

相关内容

  • 没有找到相关文章

最新更新