1

你好,我有这本词典。。

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 会告诉我这将包含键/值对的数量。

4

3 回答 3

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)实例。

于 2012-06-09T15:04:18.153 回答
1

如果将相同的键添加到字典中,则会出现异常。如果这是一个键值对列表,您可以使用 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
于 2012-06-09T15:02:32.530 回答
0

请参阅我对 SO 问题c# 字典的回答如何为单个键添加多个值?我在这里展示了我的多地图实现。这基本上是一个带有列表条目的字典。它允许您存储每个键的值列表。

于 2012-06-09T15:05:45.097 回答