Задача:
Поддерживать коллекцию людей.
Первая попытка решения:
Используйте словарь с числовыми индексами = ключи, основанный на dic.Count
Как указывал sanwar, в словаре хранятся пары ключ-значение. Положить (информация о)
человек в словаре, нам нужен класс человека, из которого мы можем создать человека
объекты / экземпляры для хранения нескольких информационных элементов.
Минимальный / POC код для класса Person:
Dim g_nPersonId : g_nPersonId = -1
Class cPerson
Private m_nId
Private m_sName
Private m_dtBirth
Private m_dWage
Public Function init( sName, dtBirth, dWage )
Set init = Me
g_nPersonId = g_nPersonId + 1
m_nId = g_nPersonId
Name = sName
Birth = dtBirth
Wage = dWage
End Function
Public Property Let Name( sName ) : m_sName = sName : End Property
Public Property Let Birth( dtBirth ) : m_dtBirth = dtBirth : End Property
Public Property Let Wage( dWage ) : m_dWage = dWage : End Property
Public Property Get Id() : Id = m_nId : End Property
Public Property Get Name() : Name = m_sName : End Property
Public Property Get Birth() : m_dtBirth = m_dtBirth : End Property
Public Property Get Wage() : m_dWage = m_dWage : End Property
Public Function Data()
Data = Array( m_nId, m_sName, m_dtBirth, m_dWage )
End Function
End Class ' cPerson
[Класс cPerson определяет / печатает синих людей, у каждого из которых есть идентификатор, имя, название и
зарплата. Вы создаете людей, вызывая функцию init, передавая подходящие значения
для имени, документа и зарплаты членов; идентификатор будет увеличен автоматически (с помощью глобального
счетчик вместо правильных данных уровня класса, насколько это возможно в более способных языках ОО).]
и демонстрационный скрипт, чтобы доказать, что мы можем создавать и отображать людей:
Dim oAdam : Set oAdam = New cPerson.init( "Adam", #1/5/2001#, 1234.56 )
Dim oEve : Set oEve = New cPerson.init( "Eve" , #1/6/2001#, 6543.21 )
Dim oPerson
For Each oPerson In Array( oAdam, oEve )
WScript.Echo Join( oPerson.Data(), " - " )
Next
выход:
0 - Adam - 1/5/2001 - 1234.56
1 - Eve - 1/6/2001 - 6543.21
Теперь давайте поместим их в словарь с цифровыми клавишами (специальный VBScript
другие языки имеют словари, содержащие только строковые ключи), основанные на
.Свойство. Свойство .Count пустого словаря равно 0, добавив
первый элемент (объект person, содержащий всю необходимую нам информацию) в словаре
его .Count увеличивается до 1 (готов к следующему добавлению). Вы легко можете видеть
что .Добавить .Счет +1 - пустая трата времени / усилий:
Dim dicPersons : Set dicPersons = CreateObject( "Scripting.Dictionary" )
Dim aPersons : aPersons = Array( _
Array( "Adam", #1/5/2001#, 1234.56 ) _
, Array( "Eve" , #1/6/2001#, 6543.21 ) _
)
Dim aPerson
For Each aPerson In aPersons
dicPersons.Add dicPersons.Count, New cPerson.init( aPerson( 0 ), aPerson( 1 ), aPerson( 2 ) )
Next
Dim nPerson
WScript.Echo "Adam & Eve"
For Each nPerson In dicPersons
WScript.Echo nPerson, ":", Join( dicPersons( nPerson ).Data(), " - " )
Next
dicPersons.Remove 0 ' how do we know the key of Adam?
WScript.Echo "Adam zaped"
For Each nPerson In dicPersons
WScript.Echo nPerson, ":", Join( dicPersons( nPerson ).Data(), " - " )
Next
WScript.Echo "Trying to add Caine"
On Error Resume Next
dicPersons.Add dicPersons.Count, New cPerson.init( "Caine", Date(), 0.33 )
WScript.Echo Err.Description
On Error GoTo 0
Выход
Adam & Eve
0 : 0 - Adam - 1/5/2001 - 1234.56
1 : 1 - Eve - 1/6/2001 - 6543.21
Adam zaped
1 : 1 - Eve - 1/6/2001 - 6543.21
Trying to add Caine
This key is already associated with an element of this collection
показывает, почему словари с числовыми индексами на основе .Count не являются решением
для задания: Вести собрание лиц.