从List <object> - RemoveAll或foreach循环中删除项目的速度更快?

Jam*_*mie 0 .net c#

要删除属性等于更快的值的对象?

foreach(object o in objects)
{
    if(o.name == "John Smith")
    {
         objects.Remove(o);
         break;
    }
}
Run Code Online (Sandbox Code Playgroud)

要么

objects.RemoveAll(o => o.Name == "John Smith");
Run Code Online (Sandbox Code Playgroud)

谢谢!

编辑:

我应该提到这是从集合中删除一个对象,然后打破循环,这可以防止你所描述的任何错误,尽管使用带循环计数的for循环是更好的选择!

pax*_*blo 16

如果你真的想知道一件事情是否比另一件事更快,那就进行基准测试吧.换句话说,衡量,不要猜!这可能是我最喜欢的口头禅.

除了你破坏第一个规则的事实(在处理它时修改列表,引导我调用我的第二个咒语:你不能得到任何未经优化而不是"错误"),第二个更具可读性,通常是我的目标.

而且,只是为了完成我的憎恶三位一体的咒语:首先优化可读性,然后在必要时优化速度 :-)


fox*_*oxy 5

List<string>10,000件物品中,速度为:

  • for循环:110,000滴答
  • lambda:1,000蜱

根据这些信息,我们可以得出结论,lambda表达式更快.

我在这里可以找到我使用的源代码.

请注意,我foreachfor循环替换了你,因为我们无法修改foreach循环中的值.