faiqaa Ответов: 1

Как сортировать строки списка с помощью первого элемента в VB?


Я сохраняю информацию о запасах,такую как идентификатор продукта, название продукта,цена и количество. Я хочу иметь возможность сортировать по идентификатору продукта с помощью пузырьковой сортировки.
Сначала я загружаю данные в поле списка из соответствующего текстового файла, а затем сортирую их.
Я пробовал использовать тот, что ниже, но он, похоже, не работает.Заранее спасибо.
"StringBubbleSort не объявлен"

Что я уже пробовал:

Dim STUDENT_FILE As String = ("C:\Users\Windows 7 User\Desktop\Stock.txt")
        Dim objReader As New System.IO.StreamReader(STUDENT_FILE)

        Dim strDataline As String 'Data line
        Dim strArr(2) As String ' Array for bits of line
        Dim blfound As Boolean
        ListBox1.Items.Clear()

        Do While objReader.Peek() <> -1 'read the file till the end.
            strDataline = (objReader.ReadLine()) ' read line and store into variable
            strArr = strDataline.Split(",") 'Split line and put into array
            ListBox1.Items.Add(strDataline)
            blfound = True

        Loop
        MsgBox("Stock data has been loaded")
        objReader.Close()
        If blfound = False Then MsgBox("stock data has not been found")

         'Bubble sort'
        Dim arr(ListBox1.Items.Count - 1) As String
        Dim i As Integer

        For i As Integer = 0 To arr.Length - 1


            arr(i) = CStr(ListBox1.Items(i))
        Next
        For i As Integer = 0 To arr.Length - 1
            For j As Integer = 0 To arr.Length - 2 - i
                If String.Compare(arr(j), arr(j + 1)) > 0 Then
                    Dim temp As String = arr(j)
                    arr(j) = arr(i)
                    arr(i) = temp
                End If
            Next
        Next
        StringBubbleSort(arr)
        ListBox1.Items.AddRange(arr)

1 Ответов

Рейтинг:
1

Richard MacCutchan

StringBubbleSort(arr)

Вы нигде не определили эту подпрограмму.


faiqaa

Спасибо за ваше время, будет ли это работать без подпрограммы?

Richard MacCutchan

Попробовать это.

faiqaa

Я попытался использовать этот код ниже отображаемого, показанного выше, но вместо сортировки он просто отображает данные, уже показанные в списке дважды.

Richard MacCutchan

Почему бы не позволить списку отсортировать себя? Видеть Использование элемента управления List Box[^].

faiqaa

Приведенный ниже код работал только со списком номеров, теперь проблема в том, что я храню данные о запасах, поэтому я хотел отсортировать их по идентификатору продукта,как только я напишу что-то вроде этого, 4564, Samsung galaxy note 5,£600,15 ( фактические данные, которые я сохраняю) эта сортировка вообще не сортируется..

Dim сортируется как Boolean = False

Тусклый т как струна

Делать

отсортированный = истина

For i As Integer = 0 To ListBox1.Предметы.Количество - 2

Если CDbl(ListBox1.Пункты(i).ToString) > CDbl(ListBox1.Пункты(i + 1).Метод toString) Затем

t = ListBox1.Пункты(i).Метод toString

Список listbox1.Элементы(i) = ListBox1.Пункты(i + 1)

Список listbox1.Элементы(i + 1) = t

сортировка = ложь

Конец, Если

Следующий

Если отсортировать то

Выход Делать

Конец, Если

Петля

Ошибка: дополнительная информация: преобразование строки "4564,Samsung galaxy note 5,£600,15" в тип "Double" недопустимо.

Richard MacCutchan

Зачем ты тратишь на это время? Список имеет свою собственную функцию сортировки, которая будет гораздо более эффективной; см. ссылку, которую я дал вам выше.

faiqaa

Сэр, я теряю время, потому что использовать функцию списка очень просто, у меня есть задание, и они хотят, чтобы я использовал один вид.
Спасибо

Richard MacCutchan

Ну, вы могли бы объяснить это в первую очередь. Написание пузырьковой сортировки довольно просто, но требует некоторого размышления. Вам нужно продолжать передавать пары элементов из вашего списка в процедуру сравнения, которая возвращает значение, определяющее, какой элемент идет первым: -1 означает первый из двух, +1 означает второй, а 0 означает, что они оба имеют одно и то же значение. Используя возвращаемое значение, вы можете изменить порядок элементов в списке по мере необходимости.

При просмотре списка вы ведете подсчет того, сколько ненулевых значений вы получаете от подпрограммы сравнения. Когда это число достигает нуля, список сортируется.