Найти индекс элемента в многомерном массиве

Если у меня многомерный массив:

Dim test(,,) As String

Как я могу перебирать массив, чтобы найти, содержится ли другая переменная во втором измерении массива?

очевидно, что это не сработает:

Dim x As Integer = test.IndexOf(otherVariable)

4 ответов


вы пробовали LINQ? Возможно, что-то вроде (псевдо-код-иш):

var x = (from item in test
         where item.IndexOf(OtherVariable) >= 0 
         select item.IndexOf(OtherVariable)).SingleOrDefault();

FYI, это должно работать, если вы объявите свой массив следующим образом:

string[][] test

вам нужно будет пройти через массив, используя массив.GetLowerBound и массив.GetUpperBound методы. The 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]);

вы можете найти массив.Способ метода getlength может служить метод и массив.Ранг собственности полезное. Я рекомендую создать многомерный массив и используя все эти методы и свойства, чтобы получить представление о том, как они работают.


вам нужно сделать что-то подобное..

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

на стороне примечания, многие люди не понимают, что вы можете использовать для каждого цикла на многомерных массивах.

For Each value As String In test
    Console.WriteLine(value)
Next

это будет постепенно проходить через все измерения массива.

надеюсь, что это помогает.


аналогично предыдущему вопросу, который вы задали

For i = 0 To i = test.Count - 1
   If set(1).Equals(someVariable) Then
      x = i
      Exit For
   End If
Next