我在列表上有一个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个多小时但尚未完成
答案 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";