跟进:如何在没有Linq的情况下从列表中获取一些对象?

时间:2008-12-17 15:41:31

标签: c# .net performance algorithm generics

我对this question有疑问。我在那里发了回复,但由于它被标记为已回答,我认为我不会在那里得到回复。

  

我正在运行C#framework 2.0和我   想得到一些数据   从列表?该列表是List<>。怎么样   如果没有循环,我能做到吗?   每个人手动进行比较   列表的元素<>?

看起来答案只是比较List的每个元素的更优雅方式。鉴于不保证在搜索之前对列表进行排序,原始帖子中提供的任何方法是否确保它们正在查看原始列表的较小子集?

编辑:需要注意的一点是,我不打算在这里做任何事情。我只是想知道在另一个问题中提供的解决方案是否真正做了OP所要求的,关于循环遍历整个列表。通常,要搜索未排序的列表(至少在给定数据结构时不需要),您必须搜索整个列表。但是,其他线程上的任何解决方案都有基础优化以防止搜索整个列表吗?

编辑:我真的没有得到任何有用的答案,但我会赞同答案,至少证实了我的常识。如果我发现一个更好的新答案,我会改变我的投票。

4 个答案:

答案 0 :(得分:2)

如果您的要求是在任意集合中快速查找内容,那么列表可能不是该作业的最佳数据结构。 :)

答案 1 :(得分:1)

您可能需要查看LINQ support for .Net 2.0

答案 2 :(得分:1)

在你提到的帖子中解释一下,如果没有LINQ,你可以从列表中获得一些对象。

 list = list.FindAll(yourFilterCriteria);

对象yourFilterCriteria是谓词,可以与对象中的所有属性或函数进行比较,因此可以自定义。

    Predicate<SimpleObject> yourFilterCriteria = delegate(SimpleObject simpleObject)
    {
        return simpleObject.FirstName.Contains("Skeet") && simpleObject.Age < 30;
    };

此示例显示您可以搜索列表而不循环使用manullay,并且您将获得所有名为Skeet且年龄低于30的人。

答案 3 :(得分:0)

如果您只是在寻找第一个匹配项,那么Find方法将完成这项工作。它不会循环遍历整个列表,而是返回第一次出现的对象。但是,如果您想要找到所有这些数据,那么如果未对数据进行排序,您希望如何仅搜索数据的子集?