1

私は配列の配列を持っています:

Dim IDMUsers As List(Of Array)

この配列に情報を入力します。例:[{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レジスタ)があるため、非常に遅く、より良いアプローチが必要です。

4

1 に答える 1

0

私のコードは C# です。少なくとも 1 つの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;
            }
        }
于 2012-09-08T10:32:53.837 に答える