如果我有一个多维数组:
Dim test(,,) As String
如何遍历数组以查找数组的第二维中是否包含另一个变量?
显然,这不起作用:
Dim x As Integer = test.IndexOf(otherVariable)
答案 0 :(得分:3)
您需要使用Array.GetLowerBound和Array.GetUpperBound方法遍历数组。 Array.IndexOf
和Array.FindIndex
方法不支持多维数组。
例如:
string[,,] data = new string[3,3,3];
data.SetValue("foo", 0, 1, 2 );
for (int i = data.GetLowerBound(0); i <= data.GetUpperBound(0); i++)
for (int j = data.GetLowerBound(1); j <= data.GetUpperBound(1); j++)
for (int k = data.GetLowerBound(2); k <= data.GetUpperBound(2); k++)
Console.WriteLine("{0},{1},{2}: {3}", i, j, k, data[i,j,k]);
您可能还会发现Array.GetLength method和Array.Rank property很有用。我建议设置一个小的多维数组,并使用所有这些方法和属性来了解它们的工作原理。
答案 1 :(得分:2)
你试过LINQ吗?或许类似于(伪代码)的东西:
var x = (from item in test
where item.IndexOf(OtherVariable) >= 0
select item.IndexOf(OtherVariable)).SingleOrDefault();
仅供参考,如果你这样声明你的数组,这应该可行:
string[][] test
答案 2 :(得分:2)
你需要做类似的事情......
Dim test As String(,) = New String(,) {{"1", "2", "3"}, {"4", "5", "6"}}
Dim cols As Integer = test.GetUpperBound(0)
Dim rows As Integer = test.GetUpperBound(1)
Dim toFind As String = "4"
Dim xIndex As Integer
Dim yIndex As Integer
For x As Integer = 0 To cols - 1
For y As Integer = 0 To rows - 1
If test(x, y) = toFind Then
xIndex = x
yIndex = y
End If
Next
Next
另一方面,很多人都没有意识到你可以在多维数组上使用a循环。
For Each value As String In test
Console.WriteLine(value)
Next
这将逐步遍历数组的所有维度。
希望这有帮助。
答案 3 :(得分:1)
与您之前提出的问题类似
For i = 0 To i = test.Count - 1
If set(1).Equals(someVariable) Then
x = i
Exit For
End If
Next