我有一个巨大的集合(我可以使用OfType<>()强制转换为对象)。这些对象中的每一个都具有Category
属性,该属性是从应用程序中其他位置的列表中提取的。此集合可以达到数百个项目的大小,但可能只有6/30的可能类别实际使用。找到这6个类别的最快方法是什么?巨大的Collection的大小让我不再只是迭代整个事物并返回所有唯一值,所以有更快的方法来实现这个吗?
理想情况下,我会将类别收集到List<string>
。
答案 0 :(得分:2)
如果您使用的是.NET 3.5,请尝试以下操作:
List<string> categories = collection
.Cast<Foo>()
.Select(foo => foo.Category)
.Distinct()
.ToList();
它应该非常快。
我认为这些对象最初来自数据库?如果是这样,那么您可能想要求数据库为您完成工作。如果该列上有索引,那么您将立即接近结果,甚至无需将对象提取到内存中。
答案 1 :(得分:0)
庞大的Collection的大小让我不再只是遍历整个事物并返回所有独特的值
我担心为了找到所有使用过的类别,你必须查看每个项目一次,这样你就很难避免迭代(除非你在构建你的集合时跟踪使用的类别)。
尝试Mark Byers解决方案对您来说足够快,如果不是,则只担心其性能。