.NET 辞書での重複キーの管理
辞書での重複キーの管理は、多くのプログラミング シナリオで共通の課題です。 .NET 基本クラス ライブラリでは、通常、辞書によってキーに一意性制約が適用され、同じキーに関連付けられた複数の値の格納が禁止されます。ただし、この制限を克服し、場合によっては重複キーに対応する方法があります。
カスタム クラスの使用
1 つの方法は、次のようなカスタム辞書クラスを作成することです。重複したキー。質問で述べたように、Dictionary
.NET 3.5 以降の Lookup クラス
.NET 3.5 以降を使用している場合、 Lookup クラスは、より洗練されたソリューションを提供します。 Lookup クラスは、キーとそれに対応する値のコレクションを作成するジェネリック型です。重要なのは、キーの重複を許可し、同じキーに関連付けられた値をグループ化することです。
Enumerable.ToLookup 拡張メソッドを使用して Lookup インスタンスを作成できます。このメソッドは、キーと値のペアのシーケンスを取得し、キーを主キーとして、値をそれぞれのコレクションに格納したルックアップを返します。
var lookup = sequence.ToLookup(keySelector, valueSelector);
たとえば、次のコードは、キーが文字列で値が整数のリストである辞書:
var dictionary = new Dictionary<string, List<int>> { { "key1", new List<int> { 1, 2 } }, { "key2", new List<int> { 3, 4 } } }; var lookup = dictionary.ToLookup(x => x.Key, x => x.Value);
Lookup インスタンスを取得したら、キーに関連付けられた値にアクセスできます。 [] 演算子または GetValues メソッドを使用します。 [] 演算子は値のリストを返しますが、GetValues は IEnumerable
Lookup クラスの制限
Lookup クラスは不変であることに注意することが重要です。作成後にキーや値を追加または削除することはできません。ただし、必要な変更を加えて新しいルックアップ インスタンスを作成することはできます。さらに、Lookup クラスは同時変更をサポートしていません。同時アクセスが必要な場合は、ConcurrentDictionary の使用を検討してください。
結論
ただし、.NET 基本クラス ライブラリには、重複を明示的にサポートする組み込み辞書型が提供されていません。 .NET 3.5 以降の Lookup クラスは、重複キーに関連付けられた値をグループ化し、取得するための便利で効率的なソリューションを提供します。
以上が.NET ディクショナリの重複キーを管理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。