A HashSet<T>
は、O(1)に特定の項目が含まれているかどうかを判断できます。私は私のカスタムクラスのEquals()
とGetHashCode()
をオーバーライドする場合、私は、オブジェクトAを持つことができ、ある別のオブジェクトA」ではないアイデンティティによって等しいがためEquals()
戻りtrue
とGetHashCode()
は、同じハッシュコードを返します。O(1)内のHashSet <T>から等しいオブジェクトを取得します。
ここで、Aがハッシュセットにあるとすれば、A '(ハッシュセットの観点からはAに等しい)で与えられたO(1)のAを検索したいと考えています。
var a = new MyClass("A");
var a_prime = new MyClass("A");
Debug.Assert(a.Equals(a_prime));
Debug.Assert(a.GetHashCode() == a_prime.GetHashCode());
var set = new HashSet<MyClass>();
set.Add(a);
Debug.Assert(set.Contains(a_prime));
// This:
var retrieved_a = set.Get(a_prime);
どのようにするには?
(thisは私が探している答えをしていない、とthisは全く答えを持っていないことに注意してください。)
いくつかの背景情報に:私はインターン自分へのセットを使用したいですオブジェクトはC#のinterns文字列と同じ方法です。等しいオブジェクトは1つのインスタンスしか必要ありません。このようにして、私はそのようなオブジェクトにメタデータを追加し、そのメタデータなしで他の同等のインスタンスが存在しないことを確認できます。
「A」から「A」までの辞書マッピングを使用するだけではどうですか? –
[HashSetから実際のアイテムを取り出す方法?](http://stackoverflow.com/questions/7760364/how-to-retrieve-actual-item-from-hashsett) –
nawfal
もう1つの[アクセス方法参照なしハッシュ値の列挙なし?](http://stackoverflow.com/questions/7290443/how-to-access-the-reference-values-of-a-hashsettvalue-without -enumeration?) – nawfal