C#の巨大なコレクションで使用されるプロパティのサブセットをすばやく取得する
-
02-10-2019 - |
質問
オブジェクトのoftype <>()を使用して列挙可能としてキャストすることができる巨大なコレクションがあります。これらのオブジェクトにはそれぞれがあります Category
プロパティは、アプリケーションのどこかにリストから引き出されます。このコレクションは数百のアイテムのサイズに到達できますが、たとえば、可能なカテゴリの6/30が実際に使用される可能性があります。これらの6つのカテゴリを見つけるための最速の方法は何ですか?巨大なコレクションのサイズは、私が全体を繰り返してすべてのユニークな価値を返すことを思いとどまらせるので、これを達成するより速い方法はありますか?
理想的には、カテゴリをaに収集します List<string>
.
解決
.NET 3.5を使用している場合は、これを試してください。
List<string> categories = collection
.Cast<Foo>()
.Select(foo => foo.Category)
.Distinct()
.ToList();
それは非常に速いはずです。
これらのオブジェクトはもともとデータベースから来たと思いますか?もしそうなら、あなたはデータベースにあなたのために仕事をするように頼むことを望むかもしれません。その列にインデックスがある場合、オブジェクトをメモリにフェッチすることなく、結果を即座に近づけます。
他のヒント
巨大なコレクションのサイズは、私が全体を繰り返してすべてのユニークな価値を返すことを思いとどまらせます
使用済みのすべてのカテゴリを見つけるためには、各アイテムを一度見なければならないので、反復を避けることはほとんどできません(コレクションの構築中に使用されているカテゴリを追跡しない限り)。
Mark Byers Solutionが十分に速くて、そうでない場合にのみパフォーマンスを心配しているかどうかを試してください。
所属していません StackOverflow