我在许多其他语言中使用了词典(无论它们是否被称为),但总有一种方法可以使用on参数调用:
A)如果参数用作键,则返回关联值,或者
B)以某种方式表示该参数未用作键
我被迫进入一个我必须学习excel / VBA的位置,并且在缺少.exists方法导致我寻找其他东西之前大约五分钟使用了集合类。普遍的共识似乎是scripting.Dictionary类是VBA等同于其他语言中的关联数组/字典/哈希表。
我不喜欢的一点是,我能看到检索与给定键相关联的值的唯一方法是使用.items属性(显式地,或通过scripting.Dictionary(“键”))。但是,如果密钥没有在字典中使用,而不是做任何事情来表明问题,它就会添加它。
我知道我可以使用带有.exists的if结构作为测试来实现相同的功能,并且可以编写我自己的函数,如果存在的测试失败会引发错误,但似乎很多东西要实现什么是Python中的核心功能(引发KeyError),PHP(引发注意),Java(地图返回null - 虽然在HashMaps的情况下不一定理想,其中null实际上是一个有效值 - 但它确实作为指标哈希表)。
那么有没有办法尝试通过密钥检索一个值,如果密钥没有被使用,它会做某事(理想情况下抛出一个错误),而不是默默地添加它?谷歌没有提供任何答案 - 但也许我只是没有对搜索做好准备。
答案 0 :(得分:1)
我发现当您访问不存在的密钥时Dictionary
添加密钥也不方便。
只需使用Collection
并自行编写缺少的Exist
函数,例如
Function ExistsInCollection(ByVal c As Collection, ByVal key As Variant) As Boolean
On Error GoTo not_exists
c.Item key
ExistsInCollection = True
not_exists:
End Function