タスク: 人物のコレクションを維持します。溶液に
最初の試み: はsanwarようdic.Count
に基づく数値指数=キーと辞書を使用すると、辞書記憶キーと値のペアを指摘しました。 人を辞書に入れるには、複数の情報要素を保持する人物/インスタンスを という人物を作成できる人物クラスが必要です。人クラスの
最小/ 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を有し、そして 給料。 name、doc、およびwageメンバーに適切な値 を渡して、init関数を呼び出して人を作成します。 idは自動的に拡張されます(可能なOO言語ではできるだけ適切なクラスレベルのデータの代わりにグローバル カウンタを使用します)。]
と私たちは人々を作成して表示することができますことを証明するデモスクリプト:
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に基づく数値指標と辞書が何の解決策ではない理由
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
示し :あなたは簡単に.Add .Count + 1は時間/労力の無駄です が見ることができますタスクのために:人のコレクションを維持する。
[Dictionaryオブジェクトのドキュメント](http://msdn.microsoft.com/en-us/library/x4k5wbx4%28v=VS.85%29.aspx)を見ましたか? –