标题: [原创] 在 VBScript 中使用堆栈(Stack) [打印本页]
作者: 老刘1号 时间: 2023-2-18 19:12 标题: 在 VBScript 中使用堆栈(Stack)
本帖最后由 老刘1号 于 2023-7-22 14:24 编辑
堆栈(简称为栈)是一种先入后出(First In, Last Out)的数据结构。
环境要求
- Windows XP 及以上。
- Windows 10 、 Windows 11 在 Windows 功能 中勾选 .NET Framework 3.5 (包括 .NET 2.0 和 3.0) 。
前置知识复制代码
复制代码
复制代码
复制代码
- WSH.Echo New RegExp Is New RegExp
复制代码
复制代码
- Set oRE = New RegExp
- WSH.Echo oRE Is oRE
复制代码
复制代码
- WSH.Echo CreateObject("Scripting.FileSystemObject") Is CreateObject("Scripting.FileSystemObject")
复制代码
复制代码
- Set oFS = CreateObject("Scripting.FileSystemObject")
- WSH.Echo oFS Is oFS
复制代码
复制代码
下面两个返回值出现的原因是浮点误差:复制代码
复制代码
- WSH.Echo 100000000000000000000000 = 100000000000000000000001
复制代码
复制代码
使用
创建一个 Stack 对象:- Set oS = CreateObject("System.Collections.Stack")
复制代码
Push 方法:将元素推入栈中- Set oS = CreateObject("System.Collections.Stack")
- oS.Push Empty
- oS.Push Null
- oS.Push "String"
- oS.Push 0
- oS.Push 3.14
- oS.Push CreateObject("Scripting.FileSystemObject")
- oS.Push New RegExp
- oS.Push True
- oS.Push False
复制代码
Count 属性:表示当前栈内元素个数- Set oS = CreateObject("System.Collections.Stack")
- WSH.Echo oS.Count()
复制代码
复制代码
- oS.Push 666
- WSH.Echo oS.Count()
复制代码
复制代码
Clear 方法:清空堆栈- Set oS = CreateObject("System.Collections.Stack")
- oS.Push 888
- WSH.Echo oS.Count()
复制代码
复制代码
- oS.Clear
- WSH.Echo oS.Count()
复制代码
复制代码
Clone 方法:返回该堆栈的拷贝- Set oS = CreateObject("System.Collections.Stack")
- oS.Push 666
- Set oS2 = oS.Clone()
- oS2.Push 888
- WSH.Echo oS Is oS2, oS.Count(), oS2.Count()
复制代码
复制代码
- Set oS = CreateObject("System.Collections.Stack")
- oS.Push 666
- Set oS2 = oS
- oS2.Push 888
- WSH.Echo oS Is oS2, oS.Count(), oS2.Count()
复制代码
复制代码
- Set oS = CreateObject("System.Collections.Stack")
- oS.Push CreateObject("Scripting.FileSystemObject")
- Set oS2 = oS.Clone
- WSH.Echo oS Is oS2, oS.Peek() Is oS2.Peek()
复制代码
复制代码
- Set oS = CreateObject("System.Collections.Stack")
- oS.Push New RegExp
- Set oS2 = oS.Clone
- WSH.Echo oS Is oS2, oS.Peek() Is oS2.Peek()
复制代码
复制代码
ToArray 方法:将堆栈转为普通 VBScript 数组- Set oS = CreateObject("System.Collections.Stack")
- oS.Push 1
- oS.Push 3.1415926
- oS.Push True
- WSH.Echo Join(oS.ToArray(), " ")
复制代码
复制代码
- Set oS = CreateObject("System.Collections.Stack")
- oS.Push New RegExp
- WSH.Echo oS.ToArray()(0) Is oS.Peek()
复制代码
复制代码
- Set oS = CreateObject("System.Collections.Stack")
- oS.Push CreateObject("Scripting.FileSystemObject")
- WSH.Echo oS.ToArray()(0) Is oS.Peek()
复制代码
复制代码
Contains 方法:检查堆栈内是否包含某元素- Set oS = CreateObject("System.Collections.Stack")
- oS.Push 1
- oS.Push 2
- WSH.Echo oS.Contains(0), oS.Contains(1)
复制代码
复制代码
- Set oS = CreateObject("System.Collections.Stack")
- oS.Push Null
- oS.Push oS
- WSH.Echo oS.Contains(Null), oS.Contains(oS), oS.Contains(CreateObject("System.Collections.Stack"))
复制代码
复制代码
Peek 方法:返回栈顶的元素(但不从堆栈中移除)- Set oS = CreateObject("System.Collections.Stack")
- oS.Push 1
- oS.Push 2
- WSH.Echo oS.Peek(), oS.Peek()
复制代码
复制代码
- WSH.Echo Join(oS.ToArray(), " ")
复制代码
复制代码
Pop 方法:移除栈顶元素并将其返回- Set oS = CreateObject("System.Collections.Stack")
- oS.Push 1
- oS.Push 2
- WSH.Echo oS.Pop(), oS.Pop(), UBound(oS.ToArray())
复制代码
复制代码
GetHashCode 方法:返回堆栈的哈希码- Set oS = CreateObject("System.Collections.Stack")
- Set oS2 = oS
- Set oS3 = oS.Clone()
- Set oS4 = CreateObject("System.Collections.Stack")
- WSH.Echo oS.GetHashCode(), oS2.GetHashCode(), oS3.GetHashCode(), oS4.GetHashCode()
复制代码
- 58225482 58225482 54267293 18643596
复制代码
Equals 方法:确定是否为同一个堆栈- Set oS = CreateObject("System.Collections.Stack")
- Set oS2 = oS
- Set oS3 = oS.Clone()
- Set oS4 = CreateObject("System.Collections.Stack")
- WSH.Echo oS.Equals(oS), oS.Equals(oS2), oS.Equals(oS3), oS.Equals(oS4)
复制代码
复制代码
ToString 方法:返回类名- Set oS = CreateObject("System.Collections.Stack")
- WSH.Echo oS.ToString(), TypeName(oS)
复制代码
- System.Collections.Stack Stack
复制代码
参考
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |