如何移除字典中被其他键包含的相似键并保留较长键
字典子串键清理问题
场景与需求
现有字典存储如下两组键值对:
- 键
Bob,对应值Number - 键
Bobby,对应值Number
需要实现的逻辑为:移除所有键名是其他键名子串的键值对,例如Bob是Bobby的组成部分,就保留键名更长的Bobby条目,删除短键Bob对应的条目。
初期踩坑
最开始尝试用嵌套循环搭配Instr函数实现:只要某个键名出现在其他键名中,就移除该键。但逻辑没有排除键与自身的匹配判断,会导致所有键都被误删。
初期仅需要概念层面的实现思路,不需要直接提供完整代码。
实现方案
最终通过计数器思路解决问题:新增similar_words计数器变量,遍历校验每个键时,统计该键作为子串出现在所有字典键中的次数,当计数值大于1时,说明存在其他更长的键包含当前键,此时移除当前键即可。
对应VBA实现代码:
dict_keys = dict.key For Each key In dict_keys Dim similar_words As Integer similar_words = 0 For Each search_key In dict_keys If InStr(1, search_key, temp_key, 1) > 0 Then similar_words = similar_words + 1 If similar_words > 1 Then dict.Remove (key) End If End If Next search_key Next key
内容的提问来源于stack exchange,提问作者Possdawgers
相关产品推荐
相关产品推荐

