Сортировка словаря методом реконструкции - VB
Формулировка задачи:
Посмотрите, пожалуйста, может существует более оптимальный алгоритм.
Здесь я создаю 2 массива: с ключами и со значениями.
В алгоритме сортировки вставками я переставляю одновременно оба массива.
Затем создаю виртуальный словарь: последовательно читаю, в каком порядке должны идти ключи
и заполняю его "ключ + значение исходного словаря".
Пример вызова:
Переменные изначально нетипизированны. Код ориентирован на VBScript.
Листинг программы
- 'Сортировка словаря методом вставок -> исходный словарь реконструируется
- Sub SpecialSortDict(inDict)
- Dim arrPos: arrPos = inDict.keys 'Инициализация массива позиций ключей словаря
- Dim arrTemp: arrTemp = inDict.Items 'Виртуализация значений словаря
- Dim i, j, xItem
- For i = 1 To UBound(arrTemp) 'Сортировка методом вставок
- For j = i To 1 Step -1
- If arrTemp(j) < arrTemp(j - 1) Then
- xItem = arrTemp(j) 'Обмен значений
- arrTemp(j) = arrTemp(j - 1)
- arrTemp(j - 1) = xItem
- xItem = arrPos(j) 'Обмен ключей
- arrPos(j) = arrPos(j - 1)
- arrPos(j - 1) = xItem
- Else
- Exit For
- End If
- Next
- Next
- Dim virtDict: Set virtDict = CreateObject("Scripting.Dictionary")
- For i = 0 To UBound(arrPos) 'Расставляем значения в виртуальный словарь согласно массива ключей
- virtDict.Add arrPos(i), inDict(arrPos(i))
- Next
- Set inDict = virtDict
- End Sub
Листинг программы
- Option Explicit
- Sub main()
- Dim oScr: Set oScr = CreateObject("Scripting.Dictionary")
- oScr.Add "c", 8
- oScr.Add "aa", 1
- oScr.Add "bb", 3
- oScr.Add "a", 2
- oScr.Add "i", 4
- SpecialSortDict oScr
- Dim key
- For Each key In oScr.keys
- Debug.Print key & " - " & oScr(key)
- Next
- End Sub
Решение задачи: «Сортировка словаря методом реконструкции»
textual
Листинг программы
- flags = [Текстовые элементы] Or [По убыванию] Or [Игнорировать регистр]
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д