我正在编写一个循环来浏览2D循环的第一个数组,我现在有这样的:
For Each Dir_path In MasterIndex(, 0)
'do some stuff here
Next
但它给了我一个错误,说它希望在第一个字段中有一个表达式。但这就是我想要做的,循环通过第一个字段。我该如何解决?我会在那里放什么?
编辑:澄清一下,我特意在每个数组的子数组中寻找第0个元素,这就是为什么第二个字段始终为0。
答案 0 :(得分:15)
您可以使用嵌套的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
答案 1 :(得分:1)
你根本做不到。 .NET框架基础结构中并不真正支持多维数组。它们似乎被标记为事后的想法。最好的解决方案通常不是使用它们,而是使用锯齿状数组(数组数组 - Integer()()
而不是Integer(,)
)。
答案 2 :(得分:0)
您可以递归使用Enumerable.Range来迭代数组的尺寸。
让我们说我们有一个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);
}
}
相同的逻辑可以应用于任意数量的尺寸。