2012-06-09 141 views
1

您好我有這個詞典..字典在VB.NET獲得密鑰分組

Dim Rooms As New Dictionary(Of Integer, Of Integer) 

Rooms(1) = 101, 102, 109, 110 
Rooms(2) = 103, 104, 105 
Rooms(3) = 106, 107 

我想知道如果我能獲得多少個鍵是在字典

例如,在這本字典我有3個鍵,如果我使用Rooms.Count它返回我9即每對鍵值,但我想獲得3,每個不同的值作爲關鍵。

編輯:Sintax錯誤 PD:我現在不能使用,因爲我已經在通過IP過濾web服務使用,但VS2010如果我的字典使用次數,告訴我,將包含密鑰的數量/值對。

+1

字典鍵必須是唯一的,我希望這會在運行時失敗。我不認爲字典適合您的需求。 – vcsjones

+1

在你的最後一個例子中,你只有3個鍵,而不是9個。並且你不能使用該語法來設置值。字典中的每個鍵(整數,整數)只有一個值不是4,3,2 – Steve

+0

是的是對於一個更復雜的sintax,但我已經使用這個像一個簡單的例子,我必須使用一個字符串字典,字典(整數,列表) – bombai

回答

3

如果你正在談論System.Collections.Generic.Dictionary(Of TKey, Of TValue),你的代碼將拋出ArgumentException因爲你添加相同的鍵數次。

它仍然如果改用索引將無法正常工作:

Rooms(1) = 101 
Rooms(1) = 102 
... 

這樣,也不會有例外,但第二線將只覆蓋存儲在第一線的值。

看來你實際上想使用Dictionary(Of Integer, Of List(Of Integer))。像這樣使用它:

Dim Rooms = Rooms As Dictionary(Of Integer, Of List(Of Integer)) 

Rooms(1) = New List(Of Integer) From { 101, 102, 109, 110 } 
Rooms(2) = New List(Of Integer) From { 103, 104, 105 } 
Rooms(3) = New List(Of Integer) From { 106, 107 } 

Rooms.Count然後將提供您字典中的鍵數。

如果且僅當您的每個密鑰的列表的長度稍後才發生更改,則可以使用數組而不是List(Of Integer)實例。

+0

對不起,我寫了一個列表思考。在這種情況下是這樣的 房間(1)= 101,102,109,110個 室(2)= 103,104,105個 房間(3)= 106,107 我怎樣才能知道什麼是數鑰匙? 3在這種情況下.. 謝謝抱歉。 – bombai

+0

如果您使用「字典(整數,列表(整數)」),則字典的「Count」屬性實際上會返回您正在查找的鍵的數量。 –

+0

好嗎? VS2010告訴我,這是對的數量,而不是不同的鍵的數量,我現在不能測試..謝謝。 – bombai

1

如果您將相同的密鑰添加到字典中,您將收到異常。如果這是keyvaluepairs的列表,你可以使用LINQ GROUPBY操作

Dim rooms = New List(Of KeyValuePair(Of String, String))() 

rooms.Add(New KeyValuePair(Of String, String)("one", "thing1")) 
rooms.Add(New KeyValuePair(Of String, String)("one", "thing2")) 
rooms.Add(New KeyValuePair(Of String, String)("two", "other1")) 
rooms.Add(New KeyValuePair(Of String, String)("two", "other2")) 

Dim query = rooms.GroupBy(Function(x) x.Key) 
For Each g As var In query 
    Console.WriteLine("Key: " & Convert.ToString(g.Key)) 
    For Each v As var In g 
     Console.WriteLine(vbTab & Convert.ToString(v.Value)) 
    Next 
Next