每个循环需要更多时间才能完成

时间:2017-07-22 01:35:31

标签: c# .net

我在列表上有一个foreach。列表长度总是大约200K左右。

当我遍历foreach中的列表时,foreach中的逻辑将处理另一个集合,该集合在列表中也将是大约100万个项目。对于每次迭代,集合将被过滤,并且需要更新属性并按原样返回集合。但通过这样做,过程永远不会完成。

foreach(var list in iterationlist)
{
  var filteredCollections = collection.where(a=>a.name==list.name);
   filteredCollections.foreach(x=>{x.city="xxxx";});
}

有什么方法可以让这种逻辑更快?目前,此实施需要3个多小时但尚未完成

1 个答案:

答案 0 :(得分:0)

您可以使用Lookup(类似于Dictionary<key, List<value>>):

var lookup = collection.ToLookup(a => a.name);

foreach (var list in iterationlist)
    foreach (var x in lookup[list.name])
        x.city="xxxx";

另一种选择是散列名称:

var names = new HashSet<string>(iterationlist.Select(x => x.name));

foreach (var x in collection)
    if (names.Contains(x.name))
        x.city="xxxx";