VB.NET中的字典获取分组键

VB.NET中的字典获取分组键,vb.net,count,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错误 P.D:我现在不能使用,因为我必

嗨,我有这本字典

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错误
P.D:我现在不能使用,因为我必须在IP过滤的Web服务中使用,但是VS2010如果我使用count on the dictionary,它会告诉我将包含键/值对的数量。

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

如果在字典中添加相同的键,则会出现异常。如果这是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

如果您谈论的是
System.Collections.Generic.Dictionary(TKey的,TValue的)
,那么您的代码将抛出一个
ArgumentException
,因为您多次添加同一个键

如果改用索引器,它仍然无法工作:

Rooms(1) = 101
Rooms(1) = 102
...
这样,就不会有例外,但第二行只会覆盖第一行中存储的值

似乎您实际上想要使用
字典(整数的,列表的)(整数的))
。像这样使用它:

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

如果您谈论的是
System.Collections.Generic.Dictionary(of TKey,of TValue)
,您的代码将抛出一个
ArgumentException
,因为您多次添加同一个键

如果改用索引器,它仍然无法工作:

Rooms(1) = 101
Rooms(1) = 102
...
这样,就不会有例外,但第二行只会覆盖第一行中存储的值

似乎您实际上想要使用
字典(整数的,列表的)(整数的))
。像这样使用它:

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

Se我对SO问题的回答,其中显示了我的多映射实现。这基本上是一本包含列表条目的词典。它允许您为每个键存储一个值列表。

请参阅我对SO问题的回答,我在这里展示了多重映射的实现。这基本上是一本包含列表条目的词典。它允许您为每个键存储一个值列表。

字典键必须是唯一的,我希望这在运行时会失败。我认为字典不适合你的需要。在上一个例子中,你只有3个键,而不是9个。您不能使用该语法来设置值。字典中的每个键(整型,整型)只有一个值,而不是4,3,2是用于更复杂的sintax,但我使用了这一个,就像一个简单的例子,我必须使用一个字符串字典,一个列表字典(整型,整型)字典键必须是唯一的,我希望这在运行时失败。我认为字典不适合你的需要。在上一个例子中,你只有3个键,而不是9个。您不能使用该语法来设置值。字典中的每个键(整型,整型)只有一个值而不是4,3,2是的,用于更复杂的sintax,但我使用了这一个,就像一个简单的例子,我必须使用一个字符串字典,一个列表字典(整型,一个列表)对不起,我写的是作为列表的思考。在这种情况下,房间(1)=101、102、109、110房间(2)=103、104、105房间(3)=106、107我怎么知道钥匙的号码?3.在这种情况下。。谢谢,很抱歉。如果您使用
字典(整数的,列表的(整数的))
,字典的
Count
属性实际上会返回您正在查找的键数。确定吗?VS2010告诉我这是对的数量,而不是不同键的数量,我现在无法测试它..谢谢.在
字典(整数的,列表(整数的))中
有两个值对,一个是
整数
,另一个是
列表(整数的)
。每个添加的密钥都有一对这样的密钥,每个密钥最多只能添加一次。因此,
Count
是键的数量。对不起,我写的是一个列表。在这种情况下,房间(1)=101、102、109、110房间(2)=103、104、105房间(3)=106、107我怎么知道钥匙的号码?3.在这种情况下。。谢谢,很抱歉。如果您使用
字典(整数的,列表的(整数的))
,字典的
Count
属性实际上会返回您正在查找的键数。确定吗?VS2010告诉我这是对的数量,而不是不同键的数量,我现在无法测试它..谢谢.在
字典(整数的,列表(整数的))中
有两个值对,一个是
整数
,另一个是
列表(整数的)
。每个添加的密钥都有一对这样的密钥,每个密钥最多只能添加一次。因此,
Count
是键的数量。