大きなセットの複数の値を保存して、一意でない値を持つプロパティに基づいてラムダ式で素早く見つけることができますか?プロパティに基づいて、セットから要素を素早く選択
サンプルケース(パフォーマンスのために最適化されていない):
class Product
{
public string Title { get; set; }
public int Price { get; set; }
public string Description { get; set; }
}
IList<Product> products = this.LoadProducts();
var q1 = products.Where(c => c.Title == "Hello"); // 1 product.
var q2 = products.Where(c => c.Title == "Sample"); // 5 products.
var q3 = products.Where(c => string.IsNullOrEmpty(c.Title)); // 12 345 products.
タイトルがユニークだった場合、IDictionary
またはHashSet
を使用してパフォーマンスを最適化するのは簡単だろう。しかし、値が一意でない場合はどうですか?
'Title'にソートされたバイナリ検索ツリーかもしれません(検索する必要のある唯一のプロパティであれば) – Magnus
最後のクエリはコンパイルされません。 'string.IsNullOrEmpty(c.Title)'を意味しましたか? – svick
@スウィック:変更されました。ありがとうございました。 –