我正在编写一个循环来遍历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);
}
}
同样的逻辑可以应用于任意数量的维度