【发布时间】:2018-04-06 15:18:01
【问题描述】:
我想评估 Excel VBA 中两个脚本字典之间的差异。
示例(如果不正确,请原谅我对键/值对的表示法):
字典1 = {'a':1, 'b':2, 'c':3, 'd':4}
字典2 = {'c':3, 'd':4, 'e':5, 'f':6}
所需的单词输出:我想识别dictionary1 中不存在于dictionary2 中的元素,并识别dictionary2 中不存在于dictionary1 中的元素。
方程中的所需输出:
dictionary2 - dictionary1 的所有元素 = {'e':5, 'f':6}
dictionary1 - dictionary2 的所有元素 = {'a':1, 'b':2}
我确实意识到我可以遍历这两个字典来查找这些差异,并且我可以创建额外的字典来保存不常见的元素。不过,我很好奇是否有更简单、更优雅的方式。
我在 stackoverflow 上找到了有关如何用其他语言执行此操作的帖子,但我想知道是否有一种干净、快速、特定于 vba 的方法来执行此检查。
研究:
java 示例 - Compare two set and remove common items
python 示例 - Removing common elements from lists
perl 示例(我试图在 vba 中完成的最佳示例) - How to print the elements, which are not present in both arrays?
【问题讨论】:
-
不这么认为,但让我们看看其他 cmets 进来了......这有点像想要不相交......或不存在的地方......
-
[语义] 从技术上讲,这是一本字典吗?看起来像一个元组列表。
-
另外,你为什么在 VBA 中这样做?字典是用 VBA 创建的吗?您可以编写一个执行您建议的宏,如果它有效,请将其交给CodeReview 以获得更好的指针。
-
@BruceWayne 是的,字典是在 VBA 中通过循环 Excel 中的工作表来创建的。我的第一张表的列中有一个主列表,我的宏使用该主列表创建新的格式化(子)表。我正在尝试使用对子表所做的任何添加来更新主列表,并将对主列表的任何添加传递给女儿(然后,主和女儿将是相同的,都包含在所有列表)。根据对这个问题的反馈,我认为我可能需要以不同的方式处理这个问题。