vbscript -如何遍历经典ASP中的集合?

Translate

我希望能够做到:

For Each thing In things
End For

经典ASP-不是.NET!

This question and all comments follow the "Attribution Required."

所有的回答

Translate

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

在VB6中您可以编写一个自定义集合类,则需要编译为ActiveX DLL并将其注册到您的网络服务器上以进行访问。

来源
Translate

像这样吗

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.

如果要关联键和值使用字典对象代替:

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
来源
Translate

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

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

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

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

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

Scott
20

您也可以这样做

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

哪个会产生

 Name: Scott
 Age: 20
来源
Translate

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

Class MyCollection
    Public Property Get Items
        Items = ReturnItemsAsAnArray()
    End Property
    ...
End Class

像这样迭代

Set things = New MyCollection
For Each thing in things.Items
    ...
Next
来源
Translate

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

来源
Translate

在使用VB脚本字典对象时要非常小心!
只要发现这个“自我生存”,此对象上的原生对象:http://en.wikipedia.org/wiki/自动生存

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

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

只需花几天时间敲墙,用这个Mcrosoft“特征“ ...
vbscript字典对象创建一个从未存在但存在于另一个对象中的密钥

来源
下一个问题:
ASP.NET显示SVN修订号