VB.NET: не могу найти индекс массива - PullRequest
0 голосов
/ 15 апреля 2010
This is the code for my array (which is working)

Public numUsers As Integer
Public fNameUsers As String = ("..\..\..\users.txt")
Public UserRecords As Usersclass() 'note... this line is in a module '

reader = New System.IO.StreamReader(fNameUsers)
numUsers = 0

   'Split the array up at each delimiter of "," and add new objects '
            Do While reader.Peek <> -1
                ReDim Preserve UserRecords(numUsers)
                oneline = reader.ReadLine
                fields = oneline.Split(",")
                UserRecords(numUsers) = New Usersclass
                UserRecords(numUsers).AccountNumber = fields(0)
                UserRecords(numUsers).CourseName = fields(1)
                UserRecords(numUsers).FirstName = fields(2)
                UserRecords(numUsers).LastName = fields(3)
                UserRecords(numUsers).DOB = fields(4)
                UserRecords(numUsers).Email = fields(5)
                UserRecords(numUsers).CourseProgress = (6)
                UserRecords(numUsers).AdminCheck = fields(7)

                numUsers = numUsers + 1

            Loop
            reader.Close()

Моя проблема в том, что я не знаю, как искать индекс массива, где .accountNumber = переменная. Например, acccountNumber равен 253, каков код для поиска индекса, к которому это относится ????

Заранее спасибо

Ответы [ 4 ]

1 голос
/ 15 апреля 2010

Вам лучше отказаться от использования массивов и вместо этого взглянуть на объекты словаря.

Словарь в терминах непрофессионалов очень похож на массив, но вы можете найти объект, используя ключ, в вашем случае номер счета.

             Dim UserRecords as  New Dictionary(Of String, Usersclass)
             Dim UserRecord as Userclass
             Do While reader.Peek <> -1

                oneline = reader.ReadLine
                fields = oneline.Split(",")

                'Populate your class
                UserRecord = New Usersclass
                UserRecord.AccountNumber = fields(0)
                UserRecord.CourseName = fields(1)
                UserRecord.FirstName = fields(2)
                UserRecord.LastName = fields(3)
                UserRecord.DOB = fields(4)
                UserRecord.Email = fields(5)
                UserRecord.CourseProgress = (6)
                UserRecord.AdminCheck = fields(7)

                'Add to the dictionary here
                UserRecords.Add (fields(0),UserRecord)

            Loop

            ''Then find your UserRecord by the accountnumber e.g
            UserRecord = UserRecords("253")
0 голосов
/ 15 апреля 2010
Do While reader.Peek <> -1
                    ReDim Preserve UserRecords(numUsers)
                    oneline = reader.ReadLine
                    fields = oneline.Split(",")
                    UserRecords(numUsers) = New Usersclass
                    UserRecords(numUsers).AccountNumber = fields(0)
                    UserRecords(numUsers).CourseName = fields(1)
                    UserRecords(numUsers).FirstName = fields(2)
                    UserRecords(numUsers).LastName = fields(3)
                    UserRecords(numUsers).DOB = fields(4)
                    UserRecords(numUsers).Email = fields(5)
                    UserRecords(numUsers).CourseProgress = fields(6)
                    UserRecords(numUsers).AdminCheck = fields(7)
                    UserRecords(numUsers).password = fields(8)

                    numUsers = numUsers + 1

                Loop
0 голосов
/ 15 апреля 2010

Объект Dictionary, вероятно, именно то, что вы ищете. Это позволит вам установить собственный ключ вместо использования индекса массива. Я не пишу много VB, но вот как это будет выглядеть в c #:

//Create the dictionary
Dictionary<int, Account> userRecords = new Dictionary<int, Account>();

//Add an account to the dictionary
userRecords.Add( accountNumber, account );

//Get an accoutn out of the dictionary
Account account = userRecords[accountNumber];
0 голосов
/ 15 апреля 2010

Написать функцию поиска, пройтись по массиву и вернуть индекс, если вы нашли указанную запись. Или вы используете словарь , например

  Public UserRecords As New Dictionary(Of Integer, Usersclass)

который вы могли бы использовать, как это

  Dim desiredUser As Usersclass = UserRecords(hisAccountNumber)
...