Найти индекс элемента в многомерном массиве
Если у меня многомерный массив:
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