Сортировка словаря по ключу в VBA

Я создал словарь в VBA с помощью CreateObject("Scripting.Dictionary") который сопоставляет исходные слова целевым словам, которые нужно заменить в некотором тексте (это фактически для обфускации).

К сожалению, когда я выполняю фактическую замену в соответствии с приведенным ниже кодом, он заменит исходные слова в том порядке, в котором они были добавлены в словарь. Если у меня тогда есть, например, «Синий», а затем «Синяя ягода», «Синяя» часть в «Синей ящерице» заменяется первой мишенью, а «Берри» остается такой, какая была.

 'This is where I replace the values For Each curKey In dctRepl.keys() largeTxt = Replace(largeTxt, curKey, dctRepl(curKey)) Next 

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

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

 Public Function funcSortKeysByLengthDesc(dctList As Object) As Object Dim arrTemp() As String Dim curKey As Variant Dim itX As Integer Dim itY As Integer 'Only sort if more than one item in the dict If dctList.Count > 1 Then 'Populate the array ReDim arrTemp(dctList.Count) itX = 0 For Each curKey In dctList arrTemp(itX) = curKey itX = itX + 1 Next 'Do the sort in the array For itX = 0 To (dctList.Count - 2) For itY = (itX + 1) To (dctList.Count - 1) If Len(arrTemp(itX)) < Len(arrTemp(itY)) Then curKey = arrTemp(itY) arrTemp(itY) = arrTemp(itX) arrTemp(itX) = curKey End If Next Next 'Create the new dictionary Set funcSortKeysByLengthDesc = CreateObject("Scripting.Dictionary") For itX = 0 To (dctList.Count - 1) funcSortKeysByLengthDesc.Add arrTemp(itX), dctList(arrTemp(itX)) Next Else Set funcSortKeysByLengthDesc = dctList End If End Function 

Я искал простую функцию VBA для сортировки словарей по возрастанию значения ключа в Microsoft Excel.

Я внес некоторые незначительные изменения в код Neelsg в соответствии с моей целью (см. Следующие '// комментарии для деталей изменений):

 '/* Wrapper (accurate function name) */ Public Function funcSortDictByKeyAscending(dctList As Object) As Object Set funcSortDictByKeyAscending = funcSortKeysByLengthDesc(dctList) End Function '/* neelsg's code (modified) */ Public Function funcSortKeysByLengthDesc(dctList As Object) As Object '// Dim arrTemp() As String Dim arrTemp() As Variant ... ... ... 'Do the sort in the array For itX = 0 To (dctList.Count - 2) For itY = (itX + 1) To (dctList.Count - 1) '// If Len(arrTemp(itX)) < Len(arrTemp(itY)) Then If arrTemp(itX) > arrTemp(itY) Then ... ... ... 'Create the new dictionary '// Set funcSortKeysByLengthDesc = CreateObject("Scripting.Dictionary") Set d = CreateObject("Scripting.Dictionary") For itX = 0 To (dctList.Count - 1) '// funcSortKeysByLengthDesc.Add arrTemp(itX), dctList(arrTemp(itX)) d(arrTemp(itX)) = dctList(arrTemp(itX)) Next '// Added: Set funcSortKeysByLengthDesc = d Else Set funcSortKeysByLengthDesc = dctList End If End Function 
  • Итерация через словарь в Swift
  • Как сортировать значения карты по ключу в Java?
  • Почему в .NET нет XML-сериализуемого словаря?
  • Значение словаря C #, очищающего, когда я очищаю список, ранее назначенный ему ... почему?
  • Проблема десериализации с помощью DataContractJsonSerializer
  • Являются ли словари упорядоченными в Python 3.6+?
  • Как конвертировать JSON в HashMap с помощью Gson?
  • hash-функция для строки
  • Удалить элемент в словаре на основе значения
  • Сортировка std :: map с использованием значения
  • Преобразование списка кортежей в словарь
  • Interesting Posts

    Ошибки консоли. Не удалось загрузить ресурс: net :: ERR_INSECURE_RESPONSE

    pthread: одна команда printf дважды печатается в дочерней цепочке

    Как восстановить данные с жесткого диска OSX / Bootcamp с двумя разделами Windows и сломанной загрузочной записью на новый жесткий диск?

    Невозможно переименовать файл в Windows 7

    Можно ли отключить USB-накопитель, если в Windows 8 приостановлено копирование?

    Выполнение static_assert, что тип шаблона является другим шаблоном

    Как скопировать файл на другой путь?

    Эффект Greenscreen (он же цветной) с веб-камерой?

    Как сделать элемент «flash» в jQuery

    Явный доступ к банковским реестрам на ARM

    Предотrotation мерцания на webkit-переходе webkit-transform

    startLeScan с 128-битными UUID не работает в собственной реализации BLE на Android

    Невозможно создать JDBC-драйвер classа ” для подключения URL-адреса ‘null’: я не понимаю это исключение

    Какой параметр безопасности препятствует доступу Remote PowerShell 2.0 к пути UNC

    Как насмехаться с classом одиночного Single Enum с использованием Mockito / Powermock?

    Давайте будем гением компьютера.