如果我有一個多維數組:查找項目的索引多維數組
Dim test(,,) As String
我如何遍歷數組找到,如果另一個變量包含在數組的第二維度?
顯然,這是行不通的:
Dim x As Integer = test.IndexOf(otherVariable)
如果我有一個多維數組:查找項目的索引多維數組
Dim test(,,) As String
我如何遍歷數組找到,如果另一個變量包含在數組的第二維度?
顯然,這是行不通的:
Dim x As Integer = test.IndexOf(otherVariable)
你試過LINQ?或許沿(僞代碼-ISH)線的東西:
string[][] test
類似以前的問題,你問
For i = 0 To i = test.Count - 1
If set(1).Equals(someVariable) Then
x = i
Exit For
End If
Next
你需要做同樣的事情:
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
這將逐步遍歷數組的所有維度。
希望這會有所幫助。
您需要使用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有用。我建議設置一個小的多維數組,並使用所有這些方法和屬性來了解它們的工作方式。
它是多維的,所以Contains將無法工作,因爲項目本身是一個數組 – msarchet 2011-03-16 15:52:01
好吧,然後用Contains代替友好的代碼(就像我說的,僞代碼ish)。而不是包含,怎麼樣item.IndexOf(OtherVariable)> = 0?我會更新我的答案。 – Kon 2011-03-16 15:53:28
'IndexOf'也不起作用。 – Gabe 2011-03-16 16:30:32