搜索在数组的数组索引

问题描述:

我有数组的数组:搜索在数组的数组索引

昏暗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方法不会更有效)。您可以使用数据库而不是文件。 –

我的代码是在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