3

我有一个巨大的集合(我可以使用 OfType<>() 将其转换为可枚举的对象)。这些对象中的每一个都有一个Category属性,该属性是从应用程序中其他位置的列表中提取的。此集合可以达到数百个项目的大小,但可能只有 6/30 的可能类别被实际使用。找到这 6 个类别的最快方法是什么?巨大的 Collection 的大小使我无法只遍历整个事物并返回所有唯一值,那么是否有更快的方法来完成此操作?

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

4

2 回答 2

2

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

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

它应该非常快。

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

于 2010-04-29T14:38:33.493 回答
0

巨大的 Collection 的大小使我无法遍历整个事物并返回所有唯一值

恐怕为了找到所有使用过的类别,您必须查看每个项目一次,因此您几乎无法避免迭代(除非您在构建收藏时跟踪使用过的类别)。

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

于 2010-04-29T14:40:11.070 回答