【问题标题】:VBA - Identify Elements in one Scripting Dictionary Not Present in AnotherVBA - 识别一个脚本字典中不存在于另一个脚本字典中的元素
【发布时间】: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 中的工作表来创建的。我的第一张表的列中有一个主列表,我的宏使用该主列表创建新的格式化(子)表。我正在尝试使用对子表所做的任何添加来更新主列表,并将对主列表的任何添加传递给女儿(然后,主和女儿将是相同的,都包含在所有列表)。根据对这个问题的反馈,我认为我可能需要以不同的方式处理这个问题。

标签: vba excel


【解决方案1】:

确实没有一种简单的方法可以做到这一点。 Scripting.Dictionary 是基于 Collections 构建的,您可以查看源代码here 以了解它支持哪些功能。

最好的办法是编写一个函数来处理它,这样至少它可以被重用。类似的东西

Public Function GetUniqueKVP(dict1 as Dictionary, dict2 as Dictionary) as Dictionary
    Dim result as New Dictionary
    Dim key as Variant
    For Each key in dict1.Keys
        If Not dict2.Exists(key) Then
            result.Add(key, dict1.Item(key))
        End If
    Next key
    Set GetUniqueKVP = result
End Function

【讨论】:

  • 感谢您花时间整理这些内容。我想我需要重新评估我是如何解决这个问题的,但我会在我的最终解决方案中使用它。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2013-06-19
  • 1970-01-01
  • 1970-01-01
  • 2021-09-03
  • 2014-06-17
  • 2021-03-09
  • 2015-01-28
  • 1970-01-01
相关资源
最近更新 更多