【原创】在 VBScript 中使用哈希表(Hashtable)

发布时间 2023-07-24 10:29:06作者: 老刘001

环境要求

  • Windows XP 及以上。
  • Windows 10Windows 11Windows 功能 中勾选 .NET Framework 3.5 (包括 .NET 2.0 和 3.0)

使用

创建一个 Hashtable 对象:

Set oHT = CreateObject("System.Collections.Hashtable")

Count 属性:返回表中键值对的数量

Set oHT = CreateObject("System.Collections.Hashtable")
WSH.Echo oHT.Count()
0

IsFixedSize 属性:哈希表是否具有固定大小

由于 VBS 无法调用构造函数,故只能创建动态大小的哈希表。

故会固定返回 False

Set oHT = CreateObject("System.Collections.Hashtable")
WSH.Echo oHT.IsFixedSize()
0

IsReadOnly 属性:哈希表是否只读

由于 VBS 无法调用构造函数,故只能创建可读写的哈希表。

故会固定返回 False

Set oHT = CreateObject("System.Collections.Hashtable")
WSH.Echo oHT.IsReadOnly()
0

IsSynchronized 属性:哈希表是否线程安全

由于 VBS 为单线程,该属性无意义。

会固定返回 False

Set oHT = CreateObject("System.Collections.Hashtable")
WSH.Echo oHT.IsSynchronized()
0

Item 属性:表示指定键对应的键值对

Set oHT = CreateObject("System.Collections.Hashtable")
oHT.Item("key") = "value"
WSH.Echo oHT.Item("key")
value
Set oHT.Item("oRE") = New RegExp
WSH.Echo TypeName(oHT.Item("oRE"))
IRegExp2

Default 默认属性:表示指定键对应的键值对

Item 属性。

Set oHT = CreateObject("System.Collections.Hashtable")
oHT("key") = "value"
WSH.Echo oHT("key")
value
Set oHT("oRE") = New RegExp
WSH.Echo TypeName(oHT("oRE"))
IRegExp2

Add 方法:新添键值对

若键已经存在会抛出错误。

Set oHT = CreateObject("System.Collections.Hashtable")
oHT.Add "key", "value"
WSH.Echo oHT("key")
value
Set oHT = CreateObject("System.Collections.Hashtable")
oHT.Add "duplicate", 0
On Error Resume Next
oHT.Add "duplicate", 1
WSH.Echo Err.Number = 0
Err.Clear
0

Clear 方法:移除表内所有键值对

Set oHT = CreateObject("System.Collections.Hashtable")
oHT.Add "key", "value"
oHT.Clear
WSH.Echo oHT.Count
0

Clone 方法:创建哈希表的副本

Set oHT = CreateObject("System.Collections.Hashtable")
Set oHT2 = oHT
Set oHT3 = oHT.Clone
oHT.Add "key", "value"
WSH.Echo oHT.Count, oHT2.Count, oHT3.Count
1 1 0

Contains 方法:判断哈希表是否包含指定键

Set oHT = CreateObject("System.Collections.Hashtable")
oHT.Add "key", "value"
WSH.Echo oHT.Contains("key"), oHT.Contains("other")
-1 0

ContainsKey 方法:判断哈希表是否包含指定键

Contains 方法。

Set oHT = CreateObject("System.Collections.Hashtable")
oHT.Add "key", "value"
WSH.Echo oHT.ContainsKey("key"), oHT.ContainsKey("other")
-1 0

ContainsValue 方法:判断哈希表是否包含指定值

Set oHT = CreateObject("System.Collections.Hashtable")
oHT.Add "key", "value"
WSH.Echo oHT.ContainsValue("value"), oHT.ContainsValue("other")
-1 0

Equals 方法:判断是否为同一哈希表

Set oHT = CreateObject("System.Collections.Hashtable")
Set oHT2 = oHT
Set oHT3 = oHT.Clone
WSH.Echo oHT.Equals(oHT2), oHT.Equals(oHT3)
-1 0

GetHashCode 方法:返回哈希表的哈希

Set oHT = CreateObject("System.Collections.Hashtable")
Set oHT2 = oHT
Set oHT3 = oHT.Clone
WSH.Echo oHT.GetHashCode, oHT2.GetHashCode, oHT3.GetHashCode
54267293 54267293 18643596

Remove 方法:从哈希表中移除指定键对应的键值对

若键不存在,则什么也不做。

Set oHT = CreateObject("System.Collections.Hashtable")
oHT.Add "key", "value"
oHT.Remove "key"
oHT.Remove "nothing"
WSH.Echo oHT.Count
0

ToString 方法:返回哈希表的类型名

Set oHT = CreateObject("System.Collections.Hashtable")
WSH.Echo oHT.ToString(), TypeName(oHT)
System.Collections.Hashtable Hashtable

参考