2011-11-08 55 views
0

我有一個結構設置如下所示:如何檢查結構變量中的值是否在字典中?

Private Structure PersonInfo 
    Dim FirstName As String 
    Dim LastName As String 
    Dim Code As Integer 
    Dim Primary As Boolean 
End Structure 

我有一個字典設置爲:

Dim listPersonInfo As New Dictionary(Of Integer, PersonInfo) 

我然後依次通過一個計數器和每個PersonInfo對象添加到詞典。如果代碼已經在字典中,則Primary缺省爲false,但是如果它沒有被插入到Dictionary中,我想將Primary設置爲True。很容易檢查代碼是否是關鍵,但我不能,因爲代碼不是唯一的。

+0

是什麼字典的關鍵部分代表什麼? –

+0

只是一個計數變量。沒有意義。 – Xaisoft

+0

因此遍歷字典的.Values屬性並詢問每個項目的Code屬性。與當前對象的Code屬性進行比較,並相應地執行操作。 –

回答

0

您需要保留一個已經添加到您的循環中的代碼的單獨列表並測試該列表。

例如

Dim cAddedCodes As New Dictionary(Of Integer, Integer) 

' Pseudo-code representing your existing loop 

For nI As Integer = 0 To 999 
    Dim oPerson As PersonInfo 

    ' ...Populate person info 

    If cAddedCodes.ContainsKey(oPerson.Code) Then 
    oPerson.Primary = False 
    Else 
    oPerson.Primary = True 
    cAddedCodes.Add(oPerson.Code, oPerson.Code) 
    End If 
Next 
+0

問題是代碼不是關鍵並且不是唯一的 – Xaisoft

+0

沒關係:cAddedCodes集合只會跟蹤爲了設置主標記而在集合中存在的唯一代碼。這不是你在你的問題中尋找什麼? –

+0

啊,我明白你現在在說什麼。說得通。好主意。我會試一試。 – Xaisoft

0

作弊 將另一個int成員添加到您的結構中。 使用它作爲你的鍵,在sql表中考慮標識列(自動編號)。

我交流#男孩,所以你需要VB相當於這個

struct SomeStruct 
{ 
    private static _nextkey; 
    public String SomeString {get; set;} 
    public int Key {get { return key;} private set {Key = value;}} 
    public SomeStruct(String argSomeString) 
    { 
    Key = _nextKey; 
    _nextKey++; 
    SomeString = argSomeString; 
    } 
} 

均能包裹起來,沒有理由你不能保持_nextKey在什麼都類實例的結構雖然。 ..

每次你創建struct Key時,get的下一個值使得你在字典中測試的是SomeDictionary.ContainsKey(SomeStruct.Key);

相關問題