任务:
维护人员集合。
第一次尝试解决方案:
使用带有数字索引=键的字典,基于 dic.Count
正如 sanwar 所指出的,字典存储键值对。放(关于的信息)
字典中的人物,我们需要一个人物类,我们可以从中创建人物
保存多个信息元素的对象/实例。
Person 类的最小/POC 代码:
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 定义/蓝图个人,每个人都有一个 id、一个名字、一个 dob 和
薪水。您可以通过调用传递合适值的 init 函数来创建人员
姓名、文件和工资成员; id 将自动增加(通过使用全局
计数器而不是更强大的面向对象语言中尽可能适当的类级别数据)。]
还有一个演示脚本来证明我们可以创建和显示人物:
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 属性。空字典的 .Count 属性为 0,通过添加
字典的第一个元素(一个包含我们需要的所有信息的人对象)
它的 .Count 递增到 1(准备下一次添加)。你很容易就能看到
那 .Add .Count + 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 的数字索引的字典没有解决方案
任务:维护人员集合。