0

例如:

public void do1(string str)
{
    List<string> list = new List<string>();
    foreach (string item in list)
    {
        if (item == str)
        {
            ///
        }
    }
}

相比于:

public void do2(string str)
{
    List<string> list = new List<string>();
    var item = list.Where(x => x == str);
    ///
}

实现集合搜索的最有效方法是什么?

4

2 回答 2

1

定义“最有效”?

使用 Linq ( list.Where()) 可以为您提供更简洁且可以说更易于维护的代码,它还可以让您在使用高级操作时更轻松地查看程序背后的人为逻辑。

Usingforeach确实具有微不足道的性能奖励,并且如果您执行比 Linq 描述的更复杂的操作(例如实现状态机),它确实会给您更大的灵活性。

如果您想做一个简单的单项搜索,那么 using.Where是可以接受的,我认为没有理由使用foreach.

于 2013-09-21T04:41:29.607 回答
0

没有比简单foreach循环更快的方法了。如果列表没有特殊属性,则无法获得比通过列表进行线性搜索更好的性能。

Linq.Where.Single(及其表亲)的好处仅仅是因为阅读编写良好的.Single搜索比编写包含许多 if 语句的 foreach 方法更简洁和令人满意。

想象有

Model object = null;
foreach (var model in modelsList) {
    if (model != null && model.Property != null && model.Property.Property == "wanted") {
        object = model;
    }
}

相对

Model object = modelsList.Single(model =>
        model != null && 
        model.Property != null && 
        model.Property.Property == "wanted"
);

你会更好地理解这个想法。

实际上,性能差异可以忽略不计,但可以肯定地说,foreach在最坏的情况下 a 会稍微快一些。

于 2013-09-21T04:59:14.290 回答