在多维数组中查找项的索引

时间:2011-03-16 15:45:08

标签: c# vb.net multidimensional-array

如果我有一个多维数组:

Dim test(,,) As String

如何遍历数组以查找数组的第二维中是否包含另一个变量?

显然,这不起作用:

Dim x As Integer = test.IndexOf(otherVariable)

4 个答案:

答案 0 :(得分:3)

您需要使用Array.GetLowerBoundArray.GetUpperBound方法遍历数组。 Array.IndexOfArray.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 methodArray.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
相关问题