ホームページ > バックエンド開発 > C++ > .NET ディクショナリの重複キーを管理するにはどうすればよいですか?

.NET ディクショナリの重複キーを管理するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-30 18:21:09
オリジナル
478 人が閲覧しました

How Can I Manage Duplicate Keys in .NET Dictionaries?

.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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート