English 中文(简体)
跟进:如何在没有Linq的情况下从列表中获取一些对象?
原标题:
  • 时间:2008-12-17 15:41:30
  •  标签:

我有一个关于这个问题的问题。我在那里发布了一个回复,但由于它已被标记为已回答,我不认为我会在那里得到回复。

I am running C# framework 2.0 and I would like to get some of the data from a list? The list is a List<>. How can I do that without looping and doing comparaison manually on each element of the List<>?

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

编辑:需要注意的是,我在这里并没有尝试做任何事情。我只是想知道另一个问题中提供的解决方案是否真正实现了OP所要求的遍历整个列表。一般来说,要搜索未排序的列表(至少不需要给定数据结构),您必须搜索整个列表。然而,其他线程中的任何解决方案是否有潜在的优化来防止搜索整个列表?

编辑:我真的没有得到任何有效的回答,但我会给予那些至少确认了我常识信仰的答案信用。如果我注意到更好的答案,我会改变我的投票。

最佳回答

如果您只想找到第一个匹配项,那么Find方法就可以胜任。它不会遍历整个列表,而是返回对象的第一次出现。然而,如果您要找到所有匹配项,如果数据没有排序,您希望如何仅搜索数据的子集?

问题回答

如果您需要在任意集合中快速找到事物,那么列表可能不是最好的数据结构。 :)

你可能想查看.Net 2.0的LINQ支持

在您提到的帖子中提到,您可以在不使用 LINQ 的情况下获取列表中的某些对象。

 list = list.FindAll(yourFilterCriteria);

您的筛选条件对象是一个Predicate,可与您对象中的所有属性或函数进行比较,因此非常可定制化。

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

这个例子向您展示了,您可以在不手动循环的情况下搜索列表,您将获得所有名字为Skeet且年龄低于30岁的人。





相关问题
热门标签