VB.NET中的字典获取密钥分组

时间:2012-06-09 14:55:56

标签: vb.net count

嗨,我有这本词典..

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过滤的网络服务中使用,但是如果我在字典上使用计数VS2010,告诉我将包含键/值对的数量。

3 个答案:

答案 0 :(得分: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)个实例。

答案 1 :(得分:1)

如果将相同的密钥添加到字典中,您将获得异常。如果这是keyvaluepairs的列表,您可以使用groupby linq运算符

    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

答案 2 :(得分:0)

回答我对问题c# dictionary How to add multiple values for single key?的回答,其中我展示了我对多地图的实现。这基本上是一个包含列表条目的字典。它允许您存储每个键的值列表。