Сортировка словаря методом реконструкции - VB

Узнай цену своей работы

Формулировка задачи:

Посмотрите, пожалуйста, может существует более оптимальный алгоритм. Здесь я создаю 2 массива: с ключами и со значениями. В алгоритме сортировки вставками я переставляю одновременно оба массива. Затем создаю виртуальный словарь: последовательно читаю, в каком порядке должны идти ключи и заполняю его "ключ + значение исходного словаря".
Листинг программы
  1. 'Сортировка словаря методом вставок -> исходный словарь реконструируется
  2. Sub SpecialSortDict(inDict)
  3. Dim arrPos: arrPos = inDict.keys 'Инициализация массива позиций ключей словаря
  4. Dim arrTemp: arrTemp = inDict.Items 'Виртуализация значений словаря
  5. Dim i, j, xItem
  6. For i = 1 To UBound(arrTemp) 'Сортировка методом вставок
  7. For j = i To 1 Step -1
  8. If arrTemp(j) < arrTemp(j - 1) Then
  9. xItem = arrTemp(j) 'Обмен значений
  10. arrTemp(j) = arrTemp(j - 1)
  11. arrTemp(j - 1) = xItem
  12. xItem = arrPos(j) 'Обмен ключей
  13. arrPos(j) = arrPos(j - 1)
  14. arrPos(j - 1) = xItem
  15. Else
  16. Exit For
  17. End If
  18. Next
  19. Next
  20. Dim virtDict: Set virtDict = CreateObject("Scripting.Dictionary")
  21. For i = 0 To UBound(arrPos) 'Расставляем значения в виртуальный словарь согласно массива ключей
  22. virtDict.Add arrPos(i), inDict(arrPos(i))
  23. Next
  24. Set inDict = virtDict
  25. End Sub
Пример вызова:
Листинг программы
  1. Option Explicit
  2. Sub main()
  3. Dim oScr: Set oScr = CreateObject("Scripting.Dictionary")
  4. oScr.Add "c", 8
  5. oScr.Add "aa", 1
  6. oScr.Add "bb", 3
  7. oScr.Add "a", 2
  8. oScr.Add "i", 4
  9. SpecialSortDict oScr
  10. Dim key
  11. For Each key In oScr.keys
  12. Debug.Print key & " - " & oScr(key)
  13. Next
  14. End Sub
Переменные изначально нетипизированны. Код ориентирован на VBScript.

Решение задачи: «Сортировка словаря методом реконструкции»

textual
Листинг программы
  1. flags = [Текстовые элементы] Or [По убыванию] Or  [Игнорировать регистр]

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.933 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут