1

HashSet<T>オブジェクトのコレクションを格納するためにを使用しています。これらのオブジェクトにはすでに一意のIDが付いているSystem.GuidのでHashSet<>、オブジェクトをハッシュする方法を理解しようとするのではなく、既存のIDを使用する方がよいでしょう。ビルドインハッシュをオーバーライドして、プログラムにビルドインID値をハッシュ値として使用させるにはどうすればよいですか?

Guidまた、自分のオブジェクトのを知っていると言いますが、これだけに基づいてHashSet<>オブジェクトを取得する方法はありますか?または、代わりに辞書を使用する必要があります。HashSet<T>Guid

4

4 に答える 4

5

AHashSet<>はキーと値のペアに基づいておらず、「キーによる」アクセスを提供しません。これは、ハッシュを使用して包含を非常に迅速にチェックする、単なる一意の値のセットです。

キーと値のペアを使用するには(Guid後でフェッチするため)、最も簡単なオプションはDictionary<Guid,SomeType>です。上の既存のハッシュコードはGuid問題ないはずです(ただし、必要に応じて(ここにはありません)IEqualityComparer<T>、ハッシュに使用するを提供できます。

于 2009-06-08T21:12:27.680 に答える
4

GetHashCode()オブジェクトのメソッドをオーバーライドします。

もちろん、ここにはわずかなしわがあります... GUIDは、.NETがハッシュコードに使用するint32sよりも大きくなっています。

于 2009-06-08T21:12:33.513 に答える
1

なぜこれをオーバーライドする必要があるのですか?おそらく時期尚早の最適化のようです。

ええ、辞書を使うだけです。アプリケーションを開発したら、すべてのコードのパフォーマンスを測定するパフォーマンス調整フェーズを実行します。このハッシュ関数が最大のドレインであることが示されている場合に限り、よりパフォーマンスの高いデータ構造を検討する必要があります(とにかく存在する場合):-)

于 2009-06-08T21:07:19.327 に答える
1

System.KeyedCollectionを調べてみてください。これにより、キーフィールドの知識をコレクションの実装に組み込むことができます。

于 2009-06-08T21:09:27.593 に答える