0

そのコレクションからアイテムを検索するための最高のパフォーマンスを実現するソリューションを設計する必要があります。

問題は次のとおりです:私はタイプを持っています:

class MyType {
    public int Id { get; set; }
    public int Sequence{ get; set; }
    public string Name { get; set; }
    public Enum MyEnum { get; set; }
    //.....
}

オブジェクトのコレクションがあります: Collection<MyType>.

IdCollection<MyType>などの特定のメンバーでこれを検索したい。

分析した結果、 aDictionary<TKey, TValue>または aを使用することにしましたHashSet<T>。今、疑問があります。MyTypeの特定のメンバーで要素を検索しようとしたときに、アクセス時間に関して (時間に関して) 最良の結果が得られるコレクションは次のとおりです。

  1. キーが MyType のIdメンバーであり、 MyType がオブジェクト全体Dictionary<int, MyType>である場所を使用するには、
  2. a を使用し、HashSet<MyType>item.Id で検索するには ...

項目メンバーを SQL の Index のように見なす必要がある HashSet に設定することは可能ですか?

4

3 に答える 3

3

の「インデックス」を指定することはできませんHashSet<T>。シナリオで
使用したい。Dictionary<TKey, TValue>

于 2013-04-30T13:38:55.780 に答える
0

HashSet は、アイテムがセット内にあるかどうかを知る必要がある場合にのみ使用する必要があります...IE...

HashSet.Contains(item);

ディクショナリからアイテムを取得する場合は、ディクショナリを使用する必要があり、キーはそのコレクションへのインデックスです。したがって、上記の例では...特定の名前の辞書を検索するには、辞書全体を調べて見つける必要があります。

したがって、あなたの例では、次を使用して Id プロパティを使用して高速検索を行います。

var myDictionary = new Dictionary<int, MyType>();

myDictionary.Add(myType.Id, myType);
于 2013-04-30T13:38:34.840 に答える
0

私が理解している限り、あなたの場合Dictionaryはより速く動作します。このようなコレクションとして使用できますHashSetが、ID で項目を検索するには、linq を使用する必要があり、.NET に対するパフォーマンスの向上はありませんDictionary

しかし、どのような場合でも、コードをプロファイリングして、具体的な状況でどの実現がより速いかを知る必要があります。

于 2013-04-30T13:41:24.043 に答える