在C#中快速检索大型集合中使用的属性子集

时间:2010-04-29 14:34:08

标签: c# collections performance subset

我有一个巨大的集合(我可以使用OfType<>()强制转换为对象)。这些对象中的每一个都具有Category属性,该属性是从应用程序中其他位置的列表中提取的。此集合可以达到数百个项目的大小,但可能只有6/30的可能类别实际使用。找到这6个类别的最快方法是什么?巨大的Collection的大小让我不再只是迭代整个事物并返回所有唯一值,所以有更快的方法来实现这个吗?

理想情况下,我会将类别收集到List<string>

2 个答案:

答案 0 :(得分:2)

如果您使用的是.NET 3.5,请尝试以下操作:

List<string> categories = collection
    .Cast<Foo>()
    .Select(foo => foo.Category)
    .Distinct()
    .ToList();

它应该非常快。

我认为这些对象最初来自数据库?如果是这样,那么您可能想要求数据库为您完成工作。如果该列上有索引,那么您将立即接近结果,甚至无需将对象提取到内存中。

答案 1 :(得分:0)

  

庞大的Collection的大小让我不再只是遍历整个事物并返回所有独特的值

我担心为了找到所有使用过的类别,你必须查看每个项目一次,这样你就很难避免迭代(除非你在构建你的集合时跟踪使用的类别)。

尝试Mark Byers解决方案对您来说足够快,如果不是,则只担心其性能。