字典中VB.NET获得密钥分组(Dictionary in VB.NET obtain keys g

2019-10-16 20:20发布

您好我有这个词典..

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,每个diferent值作为密钥。

编辑:Sintax错误PD:我现在不能使用,因为我已经在通过IP过滤web服务使用,但VS2010如果我使用计数的字典,告诉我,将包含键/值对的数目。

Answer 1:

如果你正在谈论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)实例。



Answer 2:

如果添加相同的键进入词典,你会得到一个异常。 如果这是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


Answer 3:

硒我回答问题的SO C#字典如何为单一键添加多个值吗? 在这里我展示我实现了多地图。 这基本上是与列表条目的字典。 它允许你存储值的列表每个键。



文章来源: Dictionary in VB.NET obtain keys grouped
标签: vb.net count