cars(1)="/>

关于vbscript:如何在经典ASP中遍历集合?

关于vbscript:如何在经典ASP中遍历集合?

How do I traverse a collection in classic ASP?

我希望能够做到:

1
2
For Each thing In things
End For

经典ASP-不是.NET!


像这样吗

1
2
3
4
5
6
7
8
dim cars(2),x
cars(0)="Volvo"
cars(1)="Saab"
cars(2)="BMW"

For Each x in cars
  response.write(x &"<br />")
Next

参见www.w3schools.com。

如果要关联键和值,请使用字典对象:

1
2
3
4
5
6
7
8
9
Dim objDictionary
Set objDictionary = CreateObject("Scripting.Dictionary")
objDictionary.Add"Name","Scott"
objDictionary.Add"Age","20"
if objDictionary.Exists("Name") then
    ' Do something
else
    ' Do something else
end if

无论您需要什么,都需要在VBScript之外编写。

在VB6中,您可以编写一个Custom Collection类,然后需要编译为ActiveX DLL并在Web服务器上注册它才能访问它。


您将获得的最接近的是使用字典(如Pacifika所述)

1
2
3
4
5
Dim objDictionary
Set objDictionary = CreateObject("Scripting.Dictionary")
objDictionary.CompareMode = vbTextCompare 'makes the keys case insensitive'
objDictionary.Add"Name","Scott"
objDictionary.Add"Age","20"

但是我像集合一样浏览字典

1
2
3
For Each Entry In objDictionary
  Response.write objDictionary(Entry) &"<br />"
Next

您可以用这种方法遍历整个字典,写出看起来像这样的值:

1
2
Scott
20

您也可以这样做

1
2
3
For Each Entry In objDictionary
  Response.write Entry &":" & objDictionary(Entry) &"<br />"
Next

哪个会产生

1
2
 Name: Scott
 Age: 20


我之前使用的一种方法是使用返回数组的集合的属性,该数组可以迭代。

1
2
3
4
5
6
Class MyCollection
    Public Property Get Items
        Items = ReturnItemsAsAnArray()
    End Property
    ...
End Class

像这样迭代:

1
2
3
4
Set things = New MyCollection
For Each thing in things.Items
    ...
Next

在使用VB脚本字典对象时要非常小心!
只需发现此对象本身具有的"自动生存"功能即可:http://en.wikipedia.org/wiki/Autovivification

因此,当您需要比较值时,切勿使用布尔型比较,例如:
If objDic.Item("varName") <>"" Then ...
这将自动将键" varName"添加到字典中(如果它不存在,则为空值),以便进行布尔表达式的求值。

如果需要,请改用If objDic.Exists("varName")

只需花几天的时间就可以将Mcrosoft的"功能"推倒墙了...
vbscript词典对象创建一个从未存在但存在于另一个对象中的密钥


如Brett所说,最好使用vb组件创建集合。除非针对基于特定需求的应用程序,否则词典对象在ASP中不是很常用。


推荐阅读