C# 如何使用LINQ而不是foreach循环?
我想将foreach循环转换为linq查询,因为itemList可以有很多值,并且迭代该列表中的每个值非常耗时。linq可以用来实现这一点吗C# 如何使用LINQ而不是foreach循环?,c#,linq,foreach,C#,Linq,Foreach,我想将foreach循环转换为linq查询,因为itemList可以有很多值,并且迭代该列表中的每个值非常耗时。linq可以用来实现这一点吗 string fileAsString = File.ReadAllText(filePath); Match match = Regex.Match(filePath, regx.ToString()); while (match.Success) { string itemToReplace = match.Groups["part"].Va
string fileAsString = File.ReadAllText(filePath);
Match match = Regex.Match(filePath, regx.ToString());
while (match.Success)
{
string itemToReplace = match.Groups["part"].Value;
//Use linq instead of the commented out area
//
//foreach (var item in itemList)
//{
// if (itemToReplace == macro.Name)
// {
// fileAsString = fileAsString.Replace(match.Value, item.Value);
// }
//}
//
match = match.NextMatch();
}
aka对[0..len中的n执行r{n+1}=fr_n,x_n,并计算为r{n+1}
在更换操作1上进行折叠
如果使用Regex.Matches,也可以在外循环上应用聚合。但是,使用LINQ不会改变时间复杂度或使代码运行更快-Replace的调用次数相同
[注意:我再次查看了代码,不明白为什么会重复替换;以下可能不适用。要替换的参数是否应该是另一种方式?]
如果性能是一个问题,那么最好使用正则表达式来处理文件替换。也就是说,创建一个与所有项匹配的模式,尽可能少-可以具体到a | b | c或更一般。然后在匹配电梯内使用字典来查找替换值
1条件检查可以移动到内部循环之外,因为表达式在循环期间是固定的。虽然这不会影响运行时间,但我已经这样做了[出于优先考虑和]因为它使LINQ稍微简单一些。LINQ并没有摆脱循环。是什么让你认为LINQ会导致更快的执行?LINQ不会更快fileAsString从哪里来?LINQ不是魔法。如果你有很多替换要执行,那将需要时间。仅仅让你的代码使用LINQ不会让这些替换发生任何变化更快。
fileAsString = itemList.Aggregate(fileAsString,
(acc, item) => acc.Replace(match.Value, item.Value));