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サービスで使用する必要があるため、現在は使用できませんが、辞書でcountを使用すると、キーと値のペアの数が含まれるとVS2010に通知されます。

4

3 に答える 3

3

について話している場合、同じキーを数回追加しているためSystem.Collections.Generic.Dictionary(Of TKey, Of TValue)、コードはをスローします。ArgumentException

代わりにインデクサーを使用した場合でも、機能しません。

Rooms(1) = 101
Rooms(1) = 102
...

このように例外はありませんが、2行目は1行目に保存されている値を上書きするだけです。

実際に使用したいようです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

同じキーを辞書に追加すると、例外が発生します。これがキーと値のペアのリストである場合は、groupbylinq演算子を使用できます

    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 に答える