我有一个巨大的集合(我可以使用对象的type <>()作为枚举。这些对象中的每一个都有一个 Category 属性,该属性是从应用程序中其他地方的列表中绘制的。该集合可以达到数百个项目的尺寸,但实际上只有6/30实际使用了可能的类别中的6/30。找到这6个类别的最快方法是什么?巨大的收藏的大小使我不只是在整个过程中迭代并返回所有唯一的价值,所以有更快的方法可以实现这一目标吗?

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

有帮助吗?

解决方案

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

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

应该很快。

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

其他提示

巨大的收藏的大小使我无法在整个过程中迭代并返回所有唯一的价值

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

尝试如果Mark Byers解决方案对您来说足够快,并且只需担心它的性能。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top