我使用 VBA 创建了一个字典CreateObject("Scripting.Dictionary")
将源单词映射到要在某些文本中替换的目标单词(这实际上是为了混淆)。
不幸的是,当我按照下面的代码进行实际替换时,它将按照源单词添加到字典中的顺序替换源单词。例如,如果我先有“蓝色”,然后有“蓝色浆果”,则“蓝色浆果”中的“蓝色”部分将被第一个目标替换,并且“浆果”保持原样。
'This is where I replace the values
For Each curKey In dctRepl.keys()
largeTxt = Replace(largeTxt, curKey, dctRepl(curKey))
Next
我想我可以通过首先对字典进行排序来解决这个问题keys从最长长度到最短长度,然后如上所述进行替换。问题是我不知道如何以这种方式对键进行排序。
看来是我自己想出来的。我创建了以下似乎可以完成这项工作的函数:
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 - 1)
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
有关静态数组的更多信息,请参阅:https://excelmacromastery.com/excel-vba-array/#Declaring_an_Array https://excelmacromastery.com/excel-vba-array/#Declaring_an_Array
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)