1

最近、SortedList(key,value) をよく使用していますが、明らかな並べ替え部分を除いて、KeyedCollection(key, value) との違いを知りたいです。

たとえば、キーによってアイテムを取得する機能を必要とするクラスを構築していて、その並べ替えがそれほど重要ではない場合、次のうちどれがより適切なオプションですか?:

  1. クラスの属性としての SortedList:

    public class MyClass<TKey,TItem>
    {
        private SortedList<TKey, TItem> myList;
    }
    

    また

  2. KeyedCollection の拡張

    public class MyClass<TKey,TItem> : KeyedCollection<TKey,TItem>{}
    

ありがとうございました。

4

1 に答える 1

1

KeyedCollection は抽象クラスです - KeyedCollection から派生する型 (「MyKeyedDictionary」) を作成する必要があり、TValue から TKey を抽出する方法を指定する必要があります (TKey GetKeyForItem(TValue) メソッドをオーバーライドします)

したがって、MyKeyedDictionary に値を追加するときは、TValue のみを指定する必要があります (そして、クラスは舞台裏で TKey を抽出します。

KeyedCollection のもう 1 つの違いは、データを HashTable と List の両方に保存することですが、SortedList は List にのみデータを保存します (実際には 2 つのリスト - 1 つはキーを保存し、もう 1 つは値を保存します。キーごとに保存されます)。もちろん)

したがって、SortedList は値の並べ替えに関するものではなく、FAST ルックアップに関するものです。主な問題は、変更が遅いことです。しかし、優れた変更速度を持つ良い代替手段があり、その代替手段はSortedDictionaryです。また、高速なルックアップを提供しますが、優れた変更パフォーマンスも備えています。

PS SortedDictionary はバランスの取れたツリーにキーを格納しています。ソートされたリストに格納されている SortedList のキーとルックアップ速度の点でどのように比較されるかわかりません。しかし、私が読んだことから、どちらも高速なルックアップを提供します。

于 2014-12-05T10:47:10.377 に答える