как можно упорядочить элементы списка без функции сортировки (Visual Basic 2008 и Compact Net Framework 2.0) - PullRequest
0 голосов
/ 06 ноября 2018

Я работаю над формой Windows CE внутри списка это представление списка состоит из двух текстовых столбцов, которые представляют соответственно числовой код и соответствующее описание, например:

Код Код Описание

01 | Красная лампа выключена

89 | stackoverflow - классное сообщество

03 | насос 01 на

00 | Красная лампа мигает

и т. Д.

Я вставил в форму комбинированный список, заполненный числовыми значениями в текстовом формате от «00» до «99» и текстовым полем, в котором можно свободно писать.

с помощью двух командных кнопок я могу вставить в представление списка новую комбинацию элемента кода / описания, изменить текст уже вставленного кода или удалить всю строку, составленную из кода, и текст, связанный с ним. ListView.

'--- Используемые мной функции ---

'создание нового элемента внутри списка

Dim ListCode As New ListViewItem("00")

ListCode.SubItems.Add("Red lamp flashing")
myListView.Items.Add(ListCode)

'удаление элемента из списка

myListView.Items(lvPosition).Remove()

'--- 000 ---

Пока все хорошо (Брайан Адамс)

Проблемы начинаются сейчас Не работает с формой Windows, но с формой Windows CE (.net compact framework), у меня нет свойства selectable sort, доступного в окне свойств Visual Studio. Мне нужно применить алгоритм сортировки выбора, чтобы получить элементы в порядке возрастания:

00 | Красная лампа мигает

01 | Красная лампа выключена

03 | насос 01 на

89 | stackoverflow - классное сообщество

программирование в Visual Basic .NET, а не в старом VB "Я думаю", чтобы обрабатывать массивы объектов, а не простые строки, я не прав?

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018
Private Sub SortListview() 'sorting elements inside the listview
    Dim i, j
    Dim ArrayTemp() As String = {"", ""} 'support array


    For i = 0 To myListview.Items.Count - 2
        For j = i + 1 To myListview.Items.Count - 1
            If Val(myListview.Items.Count(i).Text) > Val(myListview.Items.Count(j).Text) Then
                ArrayTemp(0) = myListview.Items.Count(i).Text
                ArrayTemp(1) = myListview.Items.Count(j).SubItems(1).Text

                myListview.Items.Count(j).Text = myListview.Items.Count(i).Text
                myListview.Items.Count(j).SubItems(1).Text = myListview.Items.Count(i).SubItems(1).Text

                myListview.Items.Count(i).Text = ArrayTemp(0)
                myListview.Items.Count(i).SubItems(1).Text = ArrayTemp(1)

            End If

        Next
    Next
End Sub

Алгоритм применяется к списку и работает правильно

Есть ли более элегантный и компактный способ написания этого кода?

Спасибо за вашу помощь, ребята!

0 голосов
/ 07 ноября 2018

это самый простой алгоритм сортировки элементов в длинном массиве [0..n]:

for i = 0 to n-1
  for j = i + 1 to n
    if myArray[i] > myArray[j] then 'swap items
      k = myArray[j];
      myArray[j] = myArray[i];
      myArray[i] = k;
    next j
next i

адаптируются

...