ホームページ >バックエンド開発 >C++ >C# でマルチキー辞書を効率的に実装するにはどうすればよいですか?

C# でマルチキー辞書を効率的に実装するにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-08 19:11:53396ブラウズ

How Can I Efficiently Implement a Multi-Key Dictionary in C#?

C# マルチキー辞書の実装方法

.NET Base Class Library (BCL) には組み込みのマルチキー辞書がありませんが、利用可能なオープン ソース オプションがいくつかあります。

タプルをキーとして使用する

一般的なアプローチは、タプルをキーとして使用することです。ただし、この方法にはいくつかの欠点があります:

  • デフォルトの GetHashCode 実装では最初のフィールドのみが考慮されるため、スケーラビリティの問題が発生する可能性があります。
  • Null 値は問題を複雑にします。

カスタムタプル構造

これらの制限を回避するには、カスタムのタプル構造を定義できます。

<code class="language-csharp">public struct Tuple<T1, T2>
{
    public readonly T1 Item1;
    public readonly T2 Item2;
    public Tuple(T1 item1, T2 item2) { Item1 = item1; Item2 = item2; }
}</code>

これにより、不変性、事前に計算されたハッシュ コード、等価比較が提供されます。ベスト プラクティスは、最も特徴的なフィールドを最初の項目に入れることです。

ValueUtils ライブラリはより優れたハッシュ アルゴリズムを実装しています

ValueUtils ライブラリは、構造に対してより信頼性の高いハッシュ コードを作成できる FieldwiseHasher.Hash メソッドを提供し、タプルの GetHashCode 実装が不十分であるという問題を解決します。

名前付き値オブジェクトの可読性が向上します

ValueUtils では、複数フィールド キーで名前付きフィールドを使用することもできるため、コードの可読性が向上します。

<code class="language-csharp">sealed class MyValueObject : ValueObject<MyValueObject>
{
    public DayOfWeek day;
    public string NamedPart;
}</code>

このアプローチでは、適切なハッシュ コードを持つ名前付きタプルのネイティブ サポートが将来の C# バージョンで実装されるまで、値セマンティクスを持つデータは名前付きメンバーと正しいハッシュ コードの両方を持つことができます。

以上がC# でマルチキー辞書を効率的に実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。