提醒:本页面将不再更新、维护或者支持,文章、评论所叙述内容存在时效性,涉及技术细节或者软件使用方面不保证能够完全有效可操作,请谨慎参考!

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转换的对象了。