[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[原创] 在 VBScript 中使用有序列表(SortedList)

本帖最后由 老刘1号 于 2023-7-24 18:13 编辑

环境要求


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

前置知识
  1. WSH.Echo Empty = Empty
复制代码
  1. -1
复制代码
  1. WSH.Echo Null = Null
复制代码
  1. null
复制代码
  1. WSH.Echo New RegExp Is New RegExp
复制代码
  1. 0
复制代码
  1. Set oRE = New RegExp
  2. WSH.Echo oRE Is oRE
复制代码
  1. -1
复制代码
  1. WSH.Echo CreateObject("Scripting.FileSystemObject") Is CreateObject("Scripting.FileSystemObject")
复制代码
  1. 0
复制代码
  1. Set oFS = CreateObject("Scripting.FileSystemObject")
  2. WSH.Echo oFS Is oFS
复制代码
  1. -1
复制代码
下面两个返回值出现的原因是浮点误差:
  1. WSH.Echo 0.1 + 0.2 = 0.3
复制代码
  1. 0
复制代码
  1. WSH.Echo 100000000000000000000000 = 100000000000000000000001
复制代码
  1. -1
复制代码
使用

创建一个 SortedList 对象:
  1. Set oSL = CreateObject("System.Collections.SortedList")
复制代码
Capacity 属性:表示有序列表目前的容量
  1. Set oSL = CreateObject("System.Collections.SortedList")
  2. WSH.Echo oSL.Capacity
复制代码
  1. 0
复制代码
  1. oSL.Add 1, 1
  2. WSH.Echo oSL.Capacity
复制代码
  1. 16
复制代码
  1. oSL.Capacity = 1
  2. WSH.Echo oSL.Capacity
复制代码
  1. 1
复制代码
Count 属性:返回有序列表包含元素的个数
  1. Set oSL = CreateObject("System.Collections.SortedList")
  2. WSH.Echo oSL.Count()
复制代码
  1. 0
复制代码
  1. oSL.Add 1, 1
  2. WSH.Echo oSL.Count()
复制代码
  1. 1
复制代码
IsFixedSize 属性:是否具有固定大小

会返回 False
  1. Set oSL = CreateObject("System.Collections.SortedList")
  2. WSH.Echo oSL.IsFixedSize()
复制代码
  1. 0
复制代码
IsReadOnly 属性:是否为只读

会返回 False
  1. Set oSL = CreateObject("System.Collections.SortedList")
  2. WSH.Echo oSL.IsReadOnly()
复制代码
  1. 0
复制代码
IsSynchronized 属性:访问是否同步(是否线程安全)

由于 VBScript 是单线程的,该属性无意义。

会返回 False
  1. Set oSL = CreateObject("System.Collections.SortedList")
  2. WSH.Echo oSL.IsSynchronized()
复制代码
  1. 0
复制代码
Item 属性:表示有序列表中指定键对应的值

参数:键(整数)。
  1. Set oSL = CreateObject("System.Collections.SortedList")
  2. WSH.Echo TypeName(oSL.Item(0))
复制代码
  1. Empty
复制代码
  1. WSH.Echo oSL.Contains(0)
复制代码
  1. 0
复制代码
  1. oSL.Item(0) = 2333
  2. WSH.Echo oSL.Contains(0), oSL.Item(0)
复制代码
  1. -1 2333
复制代码
  1. Set oRE = New RegExp
  2. Set oSL.Item(0) = oRE
  3. Set oSL.Item(1) = oRE
  4. Set oSL.Item(-1) = oRE
复制代码
  1. WSH.Echo oSL.Item(0) Is oRE, oSL.Item(1) Is oRE, oSL.Item(-1) Is oRE
复制代码
  1. -1 -1 -1
复制代码
Default 默认属性:表示有序列表中指定键对应的值

Item 属性。
  1. Set oSL = CreateObject("System.Collections.SortedList")
  2. WSH.Echo TypeName(oSL(0))
复制代码
  1. Empty
复制代码
  1. WSH.Echo oSL.Contains(0)
复制代码
  1. 0
复制代码
  1. oSL(0) = 2333
  2. WSH.Echo oSL.Contains(0), oSL(0)
复制代码
  1. -1 2333
复制代码
  1. Set oRE = New RegExp
  2. Set oSL(0) = oRE
  3. Set oSL(1) = oRE
  4. Set oSL(-1) = oRE
复制代码
  1. WSH.Echo oSL(0) Is oRE, oSL(1) Is oRE, oSL(-1) Is oRE
复制代码
  1. -1 -1 -1
复制代码
Add 方法:添加新的键值对

参数:键(整数)、值。

若键已经存在,则会抛出异常。
  1. Set oSL = CreateObject("System.Collections.SortedList")
  2. For i = 0 To 9
  3.     oSL.Add i, CStr(i)
  4. Next
  5. WSH.Echo oSL.Count()
复制代码
  1. 10
复制代码
Clear 方法:清空有序列表
  1. Set oSL = CreateObject("System.Collections.SortedList")
  2. oSL.Add 0, 0
  3. WSH.Echo oSL.Count()
复制代码
  1. 1
复制代码
  1. oSL.Clear
  2. WSH.Echo oSL.Count()
复制代码
  1. 0
复制代码
Clone 方法:创建有序列表的副本
  1. Set oSL = CreateObject("System.Collections.SortedList")
  2. Set oSL2 = oSL
  3. Set oSL3 = oSL.Clone()
  4. oSL.Add 0, 0
  5. WSH.Echo oSL.Count(), oSL2.Count(), oSL3.Count()
复制代码
  1. 1 1 0
复制代码
Contains 方法:判断有序列表是否包含指定键
  1. Set oSL = CreateObject("System.Collections.SortedList")
  2. WSH.Echo oSL.Contains(0)
复制代码
  1. 0
复制代码
  1. oSL.Add 0, 1
  2. WSH.Echo oSL.Contains(0)
复制代码
  1. -1
复制代码
ContainsKey 方法:判断有序列表是否包含指定键

Contains 方法。
  1. Set oSL = CreateObject("System.Collections.SortedList")
  2. WSH.Echo oSL.ContainsKey(0)
复制代码
  1. 0
复制代码
  1. oSL.Add 0, 1
  2. WSH.Echo oSL.ContainsKey(0)
复制代码
  1. -1
复制代码
ContainsValue 方法:判断有序列表是否包含指定值
  1. Set oSL = CreateObject("System.Collections.SortedList")
  2. WSH.Echo oSL.ContainsValue(1)
复制代码
  1. 0
复制代码
  1. oSL.Add 0, 1
  2. WSH.Echo oSL.ContainsValue(1)
复制代码
  1. -1
复制代码
Equals 方法:判断是否是同一个有序列表对象
  1. Set oSL = CreateObject("System.Collections.SortedList")
  2. Set oSL2 = oSL
  3. Set oSL3 = oSL.Clone()
  4. WSH.Echo oSL.Equals(oSL2), oSL.Equals(oSL3)
复制代码
  1. -1 0
复制代码
GetByIndex 方法:获得指定索引处的值

索引从 0 开始。

可配合 Count 属性使用。
  1. Set oSL = CreateObject("System.Collections.SortedList")
  2. oSL(-1) = 111
  3. oSL(0) = 222
  4. oSL(1) = 333
  5. WSH.Echo oSL.GetByIndex(0), oSL.GetByIndex(1), oSL.GetByIndex(2)
复制代码
  1. 111 222 333
复制代码
GetHashCode 方法:获得对象的哈希值
  1. Set oSL = CreateObject("System.Collections.SortedList")
  2. Set oSL2 = oSL
  3. Set oSL3 = oSL.Clone()
  4. WSH.Echo oSL.GetHashCode(), oSL2.GetHashCode(), oSL3.GetHashCode()
复制代码
  1. 54267293 54267293 18643596
复制代码
GetKey 方法:获得指定索引处的键

索引从 0 开始。

可配合 Count 属性使用。
  1. Set oSL = CreateObject("System.Collections.SortedList")
  2. oSL(111) = -1
  3. oSL(222) = 0
  4. oSL(333) = 1
  5. WSH.Echo oSL.GetKey(0), oSL.GetKey(1), oSL.GetKey(2)
复制代码
  1. 111 222 333
复制代码
GetKeyList 方法:获得由键组成的列表

返回的列表可使用 Item 或默认属性(效果相同)。

可配合有序列表的 Count 属性使用。
  1. Set oSL = CreateObject("System.Collections.SortedList")
  2. For i = 0 To 9
  3.     oSL.Add i, CStr(i)
  4. Next
  5. Set oKL = oSL.GetKeyList()
  6. WSH.Echo oKL.Item(0), oKL(1)
复制代码
  1. 0 1
复制代码
GetValueList 方法:获得由值组成的列表

返回的列表可使用 Item 或默认属性(效果相同)。

可配合有序列表的 Count 属性使用。
  1. Set oSL = CreateObject("System.Collections.SortedList")
  2. For i = 0 To 9
  3.     oSL.Add i, CStr(i) & CStr(i)
  4. Next
  5. Set oVL = oSL.GetValueList()
  6. WSH.Echo oVL.Item(0), oVL(1)
复制代码
  1. 00 11
复制代码
IndexOfKey 方法:返回键对应的索引

索引从 0 开始。
  1. Set oSL = CreateObject("System.Collections.SortedList")
  2. For i = -10 To 10
  3.     oSL.Add i, i
  4. Next
  5. WSH.Echo oSL.IndexOfKey(0)
复制代码
  1. 10
复制代码
IndexOfValue 方法:返回值对应的索引

索引从 0 开始。
  1. Set oSL = CreateObject("System.Collections.SortedList")
  2. For i = -10 To 10
  3.     oSL.Add i, i + 10
  4. Next
  5. WSH.Echo oSL.IndexOfValue(10)
复制代码
  1. 10
复制代码
Remove 方法:移除指定键对应的键值对
  1. Set oSL = CreateObject("System.Collections.SortedList")
  2. oSL.Add 1, 2
  3. WSH.Echo oSL(1)
复制代码
  1. 2
复制代码
  1. oSL.Remove 1
  2. WSH.Echo TypeName(oSL(1))
复制代码
  1. Empty
复制代码
RemoveAt 方法:移除指定索引对应的键值对

索引从 0 开始。
  1. Set oSL = CreateObject("System.Collections.SortedList")
  2. oSL.Add 1, 2
  3. WSH.Echo oSL(1)
复制代码
  1. 2
复制代码
  1. oSL.RemoveAt 0
  2. WSH.Echo TypeName(oSL(1))
复制代码
  1. Empty
复制代码
SetByIndex 方法:替换指定索引对应键值对的值
  1. Set oSL = CreateObject("System.Collections.SortedList")
  2. oSL.Add 1, 2
  3. WSH.Echo oSL(1)
复制代码
  1. 2
复制代码
  1. oSL.SetByIndex 0, -1
  2. WSH.Echo oSL(1)
复制代码
  1. -1
复制代码
ToString 方法:返回有序列表的类型
  1. Set oSL = CreateObject("System.Collections.SortedList")
  2. WSH.Echo oSL.ToString(), TypeName(oSL)
复制代码
  1. System.Collections.SortedList SortedList
复制代码
TrimToSize 方法:将容量设置为与实际元素个数相同
  1. Set oSL = CreateObject("System.Collections.SortedList")
  2. oSL.Add 1, 1
  3. WSH.Echo oSL.Count, oSL.Capacity
复制代码
  1. 1 16
复制代码
  1. oSL.TrimToSize
  2. WSH.Echo oSL.Count, oSL.Capacity
复制代码
  1. 1 1
复制代码
参考

返回列表