本帖最后由 老刘1号 于 2023-7-24 10:58 编辑
环境要求
- Windows XP 及以上。
- Windows 10 、 Windows 11 在 Windows 功能 中勾选 .NET Framework 3.5 (包括 .NET 2.0 和 3.0) 。
优点
- 相比 VBScript 内置的数组,大小可自动变化。
- 原生支持尾部添加、插入、删除、修改、切片、范围删除、翻转、查询、克隆等操作,免去了手动编写相关逻辑。
- 可方便的转换为 VBScript 内置的数组。
使用
创建一个 ArrayList 对象:- Set oArr = CreateObject("System.Collections.ArrayList")
复制代码 Add 方法:在动态数组末尾添加元素
均摊时间复杂度 O(1) 。- Set oArr = CreateObject("System.Collections.ArrayList")
- oArr.Add Empty
- oArr.Add Null
- oArr.Add "String"
- oArr.Add 0
- oArr.Add 3.14
- oArr.Add CreateObject("Scripting.FileSystemObject")
- oArr.Add New RegExp
复制代码 Count 属性:表示动态数组当前元素个数
时间复杂度 O(1) 。- Set oArr = CreateObject("System.Collections.ArrayList")
- WSH.Echo oArr.Count()
复制代码
复制代码 - oArr.Add 8
- WSH.Echo oArr.Count()
复制代码
复制代码 Item 属性:表示动态数组的各元素
接收一个整数作为索引,下标从 0 开始。
时间复杂度 O(1) 。- Set oArr = CreateObject("System.Collections.ArrayList")
- oArr.Add Empty
- oArr.Add Null
- oArr.Add "String"
- oArr.Add 0
- oArr.Add 3.14
- oArr.Add CreateObject("Scripting.FileSystemObject")
- WSH.Echo oArr.Item(4)
复制代码
复制代码 - oArr.Item(4) = 3.1415926
- WSH.Echo oArr.Item(4)
复制代码
复制代码 - Set oArr.Item(4) = CreateObject("Scripting.FileSystemObject")
- WSH.Echo TypeName(oArr.Item(4))
复制代码
复制代码 Default 默认属性:表示动态数组的各元素
同 Item 属性。- Set oArr = CreateObject("System.Collections.ArrayList")
- oArr.Add Empty
- oArr.Add Null
- oArr.Add "String"
- oArr.Add 0
- oArr.Add 3.14
- oArr.Add CreateObject("Scripting.FileSystemObject")
- WSH.Echo oArr(4)
复制代码
复制代码 - oArr(4) = 3.1415926
- WSH.Echo oArr(4)
复制代码
复制代码 - Set oArr(4) = CreateObject("Scripting.FileSystemObject")
- WSH.Echo TypeName(oArr(4))
复制代码
复制代码 Capacity 属性:表示动态数组目前的容量
若容量不足,会自动扩容并拷贝原来的元素。
扩容的时间复杂度是O(n)。- Set oArr = CreateObject("System.Collections.ArrayList")
- WSH.Echo oArr.Count, oArr.Capacity
复制代码
复制代码 - For i = 1 To 100
- oArr.Add i
- Next
- WSH.Echo oArr.Count, oArr.Capacity
复制代码
复制代码 - oArr.Capacity = oArr.Count
- WSH.Echo oArr.Count, oArr.Capacity
复制代码
复制代码 IsFixedSize 属性:数组是否为固定大小
会返回 False。- Set oArr = CreateObject("System.Collections.ArrayList")
- WSH.Echo oArr.IsFixedSize()
复制代码
复制代码 IsReadOnly 属性:数组是否为只读
会返回 False。- Set oArr = CreateObject("System.Collections.ArrayList")
- WSH.Echo oArr.IsReadOnly()
复制代码
复制代码 IsSynchronized 属性:表示是否同步对数组的访问
由于 VBScript 是单线程的,此属性无意义。
会返回 False。- Set oArr = CreateObject("System.Collections.ArrayList")
- WSH.Echo oArr.IsSynchronized()
复制代码
复制代码 Clear 方法:清空动态数组- Set oArr = CreateObject("System.Collections.ArrayList")
- oArr.Add 6
- WSH.Echo oArr.Count()
复制代码
复制代码 - oArr.Clear
- WSH.Echo oArr.Count()
复制代码
复制代码 Clone 方法:返回该动态数组的拷贝
时间复杂度O(n)。- Set oArr = CreateObject("System.Collections.ArrayList")
- oArr.Add 666
- Set oArr2 = oArr.Clone
- oArr2.Add 888
- WSH.Echo oArr Is oArr2, oArr.Count(), oArr2.Count()
复制代码
复制代码 - Set oArr = CreateObject("System.Collections.ArrayList")
- oArr.Add 666
- Set oArr2 = oArr
- oArr2.Add 888
- WSH.Echo oArr Is oArr2, oArr.Count(), oArr2.Count()
复制代码
复制代码 - Set oArr = CreateObject("System.Collections.ArrayList")
- oArr.Add New RegExp
- oArr.Add CreateObject("Scripting.FileSystemObject")
- Set oArr2 = oArr.Clone
- WSH.Echo oArr Is oArr2, oArr(0) Is oArr2(0), oArr(1) Is oArr2(1)
复制代码
复制代码 ToArray 方法:将动态数组转为普通 VBScript 数组
时间复杂度 O(n) 。- Set oArr = CreateObject("System.Collections.ArrayList")
- oArr.Add 1
- oArr.Add 3.1415926
- oArr.Add True
- WSH.Echo Join(oArr.ToArray(), " ")
复制代码
复制代码 Contains 方法:检查动态数组内是否包含特定元素
时间复杂度O(n)。- Set oArr = CreateObject("System.Collections.ArrayList")
- oArr.Add 2333
- oArr.Add Null
- oArr.Add oArr
- WSH.Echo oArr.Contains(2333), oArr.Contains(233), oArr.Contains(Null)
复制代码
复制代码 - WSH.Echo oArr.Contains(oArr), oArr.Contains(CreateObject("System.Collections.ArrayList"))
复制代码
复制代码 GetRange 方法:返回数组的一个切片
参数:起始下标、切片长度。
时间复杂度 O(n) 。- Set oArr = CreateObject("System.Collections.ArrayList")
- For i = 0 To 9
- oArr.Add i
- Next
- WSH.Echo Join(oArr.ToArray(), " ")
复制代码
复制代码 - Set oArr2 = oArr.GetRange(2, 5)
- WSH.Echo Join(oArr2.ToArray(), " ")
复制代码
复制代码 Insert 方法:插入元素
时间复杂度O(n)。
参数:下标、元素。- Set oArr = CreateObject("System.Collections.ArrayList")
- oArr.Add 0
- oArr.Add 5
- WSH.Echo Join(oArr.ToArray(), " ")
复制代码
复制代码 - oArr.Insert 1, 4
- WSH.Echo Join(oArr.ToArray(), " ")
复制代码
复制代码 - oArr.Insert 3, 6
- oArr.Insert 1, 2
- oArr.Insert 2, 3
- WSH.Echo Join(oArr.ToArray(), " ")
复制代码
复制代码 Remove 方法:移除指定的元素
时间复杂度 O(n) 。
注意:
- 只会移除从头至尾第一个遇到的和指定元素相等的元素。
- 如果没有找到指定的元素,那么什么也不会发生。
- Set oArr = CreateObject("System.Collections.ArrayList")
- For i = 1 To 5
- oArr.Add i Mod 2
- Next
- WSH.Echo Join(oArr.ToArray(), " ")
复制代码
复制代码 - oArr.Remove 1
- WSH.Echo Join(oArr.ToArray(), " ")
复制代码
复制代码 - oArr.Remove 2
- WSH.Echo Join(oArr.ToArray(), " ")
复制代码
复制代码 RemoveAt 方法:移除指定位置的元素
时间复杂度 O(n) 。- Set oArr = CreateObject("System.Collections.ArrayList")
- For i = 1 To 5
- oArr.Add i Mod 2
- Next
- WSH.Echo Join(oArr.ToArray(), " ")
复制代码
复制代码 - oArr.RemoveAt 0
- oArr.RemoveAt 1
- oArr.RemoveAt 2
- WSH.Echo Join(oArr.ToArray(), " ")
复制代码
复制代码 RemoveRange 方法:移除指定区间的元素
参数:起始下标、长度。
时间复杂度 O(n) 。- Set oArr = CreateObject("System.Collections.ArrayList")
- For i = 0 To 5
- oArr.Add i
- Next
- WSH.Echo Join(oArr.ToArray(), " ")
复制代码
复制代码 - oArr.RemoveRange 3, 2
- WSH.Echo Join(oArr.ToArray(), " ")
复制代码
复制代码 Reverse 方法:翻转数组
时间复杂度 O(n) 。- Set oArr = CreateObject("System.Collections.ArrayList")
- For i = 0 To 9
- oArr.Add i
- Next
- WSH.Echo Join(oArr.ToArray(), " ")
复制代码
复制代码 - oArr.Reverse
- WSH.Echo Join(oArr.ToArray(), " ")
复制代码
复制代码 Sort 方法:将数组内元素排序
时间复杂度 O(n * log(n)) 。- Set oArr = CreateObject("System.Collections.ArrayList")
- For i = 0 To 9
- oArr.Add Fix(Rnd() * 100)
- Next
- WSH.Echo Join(oArr.ToArray(), " ")
复制代码
- 70 53 57 28 30 77 1 76 81 70
复制代码
- oArr.Sort()
- WSH.Echo Join(oArr.ToArray(), " ")
复制代码
- 1 28 30 53 57 70 70 76 77 81
复制代码 TrimToSize 方法:使容量缩减为正好与当前元素个数相等- Set oArr = CreateObject("System.Collections.ArrayList")
- For i = 0 To 9
- oArr.Add Fix(Rnd() * 100)
- Next
- WSH.Echo oArr.Capacity(), oArr.Count()
复制代码
复制代码 - oArr.TrimToSize
- WSH.Echo oArr.Capacity()
复制代码
复制代码 LastIndexOf 方法:返回数组中指定元素的索引
若有重复的元素,则返回最靠后的指定元素的索引。
若未找到元素,则返回 -1 。- Set oArr = CreateObject("System.Collections.ArrayList")
- oArr.Add 1
- WSH.Echo oArr.LastIndexOf(1)
复制代码
复制代码 - oArr.Add(1)
- WSH.Echo oArr.LastIndexOf(1), oArr.LastIndexOf(2)
复制代码
复制代码 ToString 方法:返回类名- Set oArr = CreateObject("System.Collections.ArrayList")
- WSH.Echo oArr.ToString(), TypeName(oArr)
复制代码
- System.Collections.ArrayList ArrayList
复制代码 参考
|