Как пройти по коллекции в классическом ASP?

Я хочу уметь:

For Each thing In things
End For

КЛАССИЧЕСКИЙ ASP - НЕ .NET!

Ответов (6)

Решение

Все, что вам нужно, нужно писать вне VBScript.

В VB6 вы можете написать класс Custom Collection , затем вам нужно будет скомпилировать его в ActiveX DLL и зарегистрировать его на своем веб-сервере для доступа к нему.

Будьте ОЧЕНЬ осторожны при использовании объекта словаря сценария VB!
Просто откройте для себя эту « автоживую », присущую этому объекту: http://en.wikipedia.org/wiki/Autovivification

Итак, когда вам нужно сравнить значения, НИКОГДА не используйте логическое сравнение, например:
If objDic.Item("varName") <> "" Then ...
Это автоматически добавит ключ " varName " в словарь (если он не существует, с пустым значением), чтобы продолжить оценку логическое выражение.

При необходимости используйте вместо него If objDic.Exists("varName") .

Просто потратьте несколько дней, ломая стены, с этой особенностью » Mcrosoft ...
vbscript-словарь-объект-создание-ключа-который-никогда-не-существовал-но-присутствует-в-другом-объекте

Что-то вроде этого?

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

Самое близкое, что вы собираетесь получить, - это использовать словарь (как упоминалось Пацификой)

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

Как сказал Бретт, для создания коллекций лучше использовать компонент vb. Объекты словаря не очень часто используются в ASP, если только не для конкретных приложений, основанных на необходимости.

Один из подходов, который я использовал раньше, - использовать свойство коллекции, возвращающее массив, который можно повторять.

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

Итерировать как:

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