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