2011-03-16 83 views
5

如果我有一個多維數組:查找項目的索引多維數組

Dim test(,,) As String 

我如何遍歷數組找到,如果另一個變量包含在數組的第二維度?

顯然,這是行不通的:

Dim x As Integer = test.IndexOf(otherVariable) 

回答

2

你試過LINQ?或許沿(僞代碼-ISH)線的東西:

string[][] test 
+0

它是多維的,所以Contains將無法工作,因爲項目本身是一個數組 – msarchet 2011-03-16 15:52:01

+0

好吧,然後用Contains代替友好的代碼(就像我說的,僞代碼ish)。而不是包含,怎麼樣item.IndexOf(OtherVariable)> = 0?我會更新我的答案。 – Kon 2011-03-16 15:53:28

+0

'IndexOf'也不起作用。 – Gabe 2011-03-16 16:30:32

1

類似以前的問題,你問

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

你需要做同樣的事情:

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

FYI,這應該如果你聲明的數組像這樣的工作,而不是這..

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 

這將逐步遍歷數組的所有維度。

希望這會有所幫助。

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有用。我建議設置一個小的多維數組,並使用所有這些方法和屬性來了解它們的工作方式。