0

特定のオブジェクトと等しい SortedDictionary からキーを取得する方法はありますか? 説明のために、メモリを大量に消費する不変のキー タイプを持つ辞書を作成するとします。

var dictionary = SortedDictionary<MyHugeType, int>();
var myEnormousKey = new MyHugeType();

dictionary[myEnormousKey] = 123;

その後、次のようなことを行います。

// This is a new instance, but it's identical to the previous key
var myIdenticalKey = new MyHugeType();

if(dictionary.ContainsKey(myIdenticalKey)) {
    myIdenticalKey = dictionary.GetKeyEqualTo(myIdenticalKey);
}

// Use myIdenticalKey reference...

明らかに、SortedDictionary には「GetKeyEqualTo」メソッドがありません。しかし、同様の効果を達成できる方法はありますか?これは基本的に、重いキー オブジェクトをインターンする効果があり、同一のインスタンスを破棄できます。キーのインデックスとそれに一致するオブジェクト インスタンスを取得することにより、SortedList クラスを使用してこれを実行できることはわかっていますが、SortedDictionary の一貫した挿入パフォーマンスは、私の用途には適しています。

すべての辞書のキーを反復して一致を検索するか、独自の BST クラスを作成する以外に、.NET の組み込みコレクションでこの目的を達成する方法はありますか?

4

3 に答える 3

1

値オブジェクトを int から、値と元のキーの両方を含む構造体またはクラスに変更できます。次に、元のキーにアクセスするには、次のようにします。

dictionary[myIdenticalKey].OriginalKey

値は次のようになります。

dictionary[myIdenticalKey].Value
于 2011-05-16T10:14:25.837 に答える
0

2つのインスタンスが同じであるかどうかを判断するコードをオーバーライドEquals()GetHashCode()て使用すると、ディクショナリで重複するキーを取得できなくなります。MyHugeTypeこれはどういう意味ですか?

于 2011-05-16T10:18:38.003 に答える
0

IEquatableキークラスにインターフェイスを実装できます。クラスの 2 つのオブジェクトが互いに等しい場合を指定します。その後、単にエントリの存在をテストし、ContainsKeyそれが返されたら、演算子trueを使用して取得できます。[]

IComparer同じ結果を達成するための実装を提供することもできます。

于 2011-05-16T10:16:07.190 に答える