Member 13973562 Ответов: 1

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


Элементы будут начинаться с x, y и w,и я должен получить его отсортированным порядком с элементами, начинающимися с x сначала в порядке убывания, затем y в порядке убывания и последним w в порядке возрастания, только элементы, начинающиеся с x, y и w, будут там.
например,

если бы я дал ввод ниже

У1
П1
У2
x1
x3
В10
w19


я должен получить ниже выхода:

x3
x1
У2
У1
П1
В10
w19

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

Общественного Класса Form1

Private Sub Button1_Click(бывал отправитель как система.Объект, бывал е как система.EventArgs) Обрабатывает Button1.Щелчок
Список listbox1.Предметы.Добавить(TextBox1.Text)
Текстовое Поле 1.Очистить()


Конец Подводной Лодки

Private Sub Button2_Click(бывал отправитель как система.Объект, бывал е как система.EventArgs) Обрабатывает Button2.Click

Dim StrArray As String() = ListBox1.Предметы.OfType(Of String).Метод toArray()
Array.Sort(StrArray)
'ListBox2.Items.AddRange(ListBox1.Предметы)
'ListBox2.Отсортированный = Истина

'Dim StrArray As String() = ListBox2.Items.OfType(Of String).Метод toArray()


Dim str1() = новая строка() {}
Dim str2() = новая строка() {}
Dim str3() = новая строка() {}
'Dim str2() как строка
'Dim str3() как строка


Для i As Integer = 0 To StrArray.Длина - 1

If (StrArray(i).Подстрока(0, 1) = "x") Затем
str1(i) = StrArray(i)

ElseIf (StrArray(i).Подстрока(0, 1) = "y") Затем
str2(i) = StrArray(i)

Еще
str3(i) = StrArray(i)


Конец, Если


Затем я




str1 выглядит следующим образом = str1 выглядит следующим образом.Обратный
стр2 = стр2.Обратный
Массив.Сортировка(стр3)

ListBox2.Items.AddRange(str1.Метод toArray)
ListBox2.Items.AddRange(str2.Метод toArray)
ListBox2.Items.AddRange(str3.Метод toArray)


Конец Подводной Лодки


End Класса

Maciej Los

Не ясно! Пожалуйста, будьте более конкретны и предоставьте более подробную информацию, например, что такое ожидаемый результат. Воспользуйся "Улучшить вопрос" виджет.

Member 13973562

ожидаемый результат уже дан

1 Ответов

Рейтинг:
2

OriginalGriff

Проблема в том, что вы устанавливаете

ListBox2.Sorted = True
это означает, что сам список автоматически упорядочивает элементы в соответствии с порядком сортировки, определенным для этого элемента - в этом случае строка-это все, что вы когда-либо добавляли в коллекцию, поэтому порядок сортировки-это сортировка строк. Не имеет значения, что вы разбиваете их на разные коллекции и добавляете отдельно, свойство Sorted означает, что ListBox автоматически изменит их порядок независимо от этого. И этот порядок сортировки всегда будет одним и тем же: строки сравниваются слева направо, и первый другой символ управляет всем порядком сортировки.
Если вы хотите использовать сортировку, то вам придется заключить каждую строку в класс, поддерживающий IComparable, и добавить в этот класс свой собственный алгоритм сортировки (а также переопределить ToString, чтобы отобразить что-либо полезное): Как использовать интерфейсы IComparable и IComparer в Visual Basic .NET или в Visual Basic 2005[^]