2012-09-07 240 views
1

我有數組的數組:搜索在數組的數組索引

昏暗IDMUsers方式列表(陣列)

我填充此陣列的信息。示例: [{Data1a,Data2a,Data3a,...,Data30a},{Data1b,Data2b,Data3b,...,Data30b},{Data1c,Data2c,Data3c,...,Data30c}]

現在,我需要找到例如「Data3b」,並且函數必須返回它所在的寄存器編號,在這種情況下,它必須返回第2條記錄。即{Data1b,Data2b,Data3b,...,Data30b }

我正在使用VB.Net。

我的代碼是:

Sub Main() 
    Dim TecoReader As New FileManagement 
    Dim IDMUsers As List(Of Array) 

    ' Populate Array 
    IDMUsers = TecoReader.ReadFromFile(My.Settings.ActivosIDMFilePath, My.Settings.CharSeparator) 

    Console.writeline (SearchInArray("text")) 
end sub 


Private Function SearchInArray(ByVal ToSearchFor As String) As String 
    For Each Register In IDMUsers 
     For Each Field In Register 
      If Field = ToSearchFor Then 
       Return Register(26) & " - " & Register(27) 
      End If 
     Next 
    Next 
    Return "" 
End Function 

它的工作原理與SeachInArray功能,但我有一個大陣(20K寄存器),所以是非常緩慢,我需要一個更好的方法。

+0

數據是否總是有特定的格式(FE第一指數結束'a',第二個以'b'結尾,...)?我的意思是,存在哪些規則?如果它不能包含任意數據,則可以使用像Dictionary這樣的其他集合。 –

+0

數據沒有這種格式。它只是表示陣列信息。我無法更改IDMUsers的類型。它必須是列表(的數組)的類型。 – Oblongo

+0

如果您無法更改集合類型,並且數據沒有特定的格式,那麼這是唯一的選擇(LINQ方法不會更有效)。您可以使用數據庫而不是文件。 –

回答

0

我的代碼是在C#中,可能是它有助於您避免至少一個FOR EACH循環....

int mainArrayIndex = 0; 
     string arrayIndex = string.Empty; 
     int searchIdex = 0; 
     foreach (string[] item in jaggedArray) 
     { 
      mainArrayIndex++; 
      searchIdex = Array.BinarySearch(item, "H"); 
      if (searchIdex > 0) 
      { 
       arrayIndex = mainArrayIndex + "," + searchIdex.ToString(); 
       break; 
      } 
     } 
+0

感謝您的回答阿南德。我以不同的方式解決了這個問題。再次感謝 – Oblongo

+0

@Oblongo對你有幫助嗎? – andy