2012-03-29 17 views
1

私は多数のカスタムレコードを格納してからレコードインスタンスを探すのに適した.NETクラスを探しています。 より具体的には、レコードクラスには3つのプロパティがあり、それらのうちの1つを使用してインスタンスを検索します。格納されるインスタンスの数は最大100,000になります。高速検索が可能な.NETクラス

私はHastSetOfについて(MyRecord>カスタムIEqualityComarerで使用する知っている。propblemは、ルックアップ操作で、私は1つのレコードだけの小道具のを知っているだろうし、実際に他の2つの小道具値を必要とするということです。

私は必要がある場合?DictionaryOf(文字列、レコード)または1より速いがある

は、事前にありがとう

答えて

1

Dictionaryクラスを使用します。この場合は、次の3つの辞書必要があります!。あなた」は、それぞれの特性に1つずつプロパティが一意でない場合は、代わりにルックアップを使用することをお勧めします。

var entriesById = entries.ToDictionary(e => e.Id); 
var entriesByCategoryId = entries.ToLookup(e => e.CategoryId); 

Console.WriteLine(entriesById[42].ToString()); 
foreach(var entry in entriesByCategoryId[13]) 
{ 
    Console.WriteLine(entry.ToString()); 
} 
0

簡単に(そしておそらくない最もメモリ効率的な)方法は、問題の性質に基づいてレコードまでを3つの別々のハッシュテーブル(Dictionary)(各プロパティペアリングのための1)のレコードを保存して見ることです

もう1つの方法は、地図のキーとして3タプルを使用することです(問題の3つのプロパティが設定されています)。与えられた性質に基づいて3タプルの適切な要素のみを考慮するカスタムコンパレータを使用しますルックアップのため

3つのプロパティの間で注文することができます。並べ替えられたマップにレコードを格納し、バイナリ検索を実行することができます(これは、探しているものを見つけるために全要素の線形クエリよりも効率的です)

EDIT:コメント後に明確にするために特定のクラス名が追加されました

+0

.NETへの接続を確立するには: 'Dictionary'は、.NETフレームワークの標準ハッシュテーブル実装です。 – StriplingWarrior

関連する問題