使用Scripting.Dictionary字典对象
提醒:本页面将不再更新、维护或者支持,文章、评论所叙述内容存在时效性,涉及技术细节或者软件使用方面不保证能够完全有效可操作,请谨慎参考!
Scripting.Dictionary是个很有用的组件,其创建了类似于Key索引对应Value值的字典对象,并且在其内部提供了快速索引访问的机制,可以让我们通过Key直接索引到指定的Value,比遍历二维数组有效得多。
其在VBScript中是这样访问的。
Dim objDict
Set objDict = WSH.CreateObject("Scripting.Dictionary")
' .Add(key, value)
objDict.Add "a", "value1"
objDict.Add "b", "value2"
objDict.Add "c", "value3"
'直接通过key=b索引到value2
WSH.Echo objDict.Item("b")
objDict.Remove "b" ' 删除索引b及其对应的值
' 以下是遍历字典
Dim objKeys, objItems, i
objKeys = objDict.Keys
objItems = objDict.Items
For i = 0 To objDict.Count -1
WSH.Echo "Key=" & objKeys(i) &_
" AND Value=" & objItems(i)
Next
' 判断指定的key是否存在
If objDict.Exists("b") Then
WSH.Echo "Found it"
Else
WSH.Echo "Not Exists!"
End If
objDict.RemoveAll ' 清空字典内所有的key及其对应value
Set objDict = Nothing
当然在JScript访问的方式一样,但是在遍历这里需要一点点变动。
var dict = WSH.CreateObject("Scripting.Dictionary");
dict.Add("a", "value1");
dict.Add("b", "value2");
dict.Add("c", "value3");
WSH.Echo(dict.Item("b"));
dict.Remove("b");
// 注意这里的遍历
var keys = new VBArray(dict.Keys());
var items = new VBArray(dict.Items());
for (var i=0; i < dict.Count; i++) {
WSH.Echo("Key=" + keys.getItem(i) +
" AND Value=" + items.getItem(i));
}
if (dict.Exists("b")) {
WSH.Echo("Found it");
} else {
WSH.Echo("Not Exists!");
}
dict.RemoveAll();
由于Scripting.Dictionary的Keys和Items的集合返回的是VB安全数组,也就是说JScript访问需要多个转换的步骤,方法就是采用new VBArray()对象,相关信息可以参考MSDN的 《VBArray Objects》 ,当获得VBArray对象后就可以通过getItem方法获取数组元素了,值得注意的是这个VBArray对象自己不创建数组,其只起到一个转换的作用,也可以将其看成是一个操作接口吧。当然其toArray()方法可以将其转换为真正的JScript数组,届时可以直接像操作JScript数组一样操作VBArray转换的对象了。
Jscript就没有必要用这个对象了吧。
@Demon 恩,不过觉得VBArray这种方式蛮特别的。
var d=new Enumerator(dict) for(;!d.atEnd();d.moveNext()){ WSH.Echo(d.item() + dict(d.item())); } 这个Enumerator应该是微软发明来遍历VB对象用的
@shirne 恩,我试了一下 alert(new Enumerator()); IE下显示为[object Object]对象,而在FF下显示为Enumerator is not defined,看来是微软的私家货,难怪遇到的比较少呢。
是的,确切地说, 是Jscript的东西.
[...] 原文链接:http://wangye.org/blog/archives/60/ [...]
[...] 好了,说了这么多,下面介绍下,我遇到的一点区别,在VBScript中不原生支持字典特性,不过我们可以通过CreateObject(“Scripting.Dictionary”)来创建一个字典对象,然后通过Add方法添加Key Value,也可以说我比较的是Python和Scripting.Dictionary组件对象的区别,我在前面的文章中简单的介绍过这个对象相关的使用方法,这里再给出相应的脚本: [...]
objDict.Add "a", "value1" "value1"是数组,如何处理
直接
objDict.Add "a", Array("1","2")
,如下面的代码示例: