2012-06-09 77 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