Tho*_*eld 2 c# linq generics collections lambda
我有两个String喜欢的系列
List<String> l_lstOne = new List<String> { "100", "1X0", "X11", "XXX" },
l_lstTwo = new List<String> { "000", "110", "100", "000" };
Run Code Online (Sandbox Code Playgroud)
我需要比较两个列表并使第二个列表像
{ "000", "1X0", "X00", "XXX" }
Run Code Online (Sandbox Code Playgroud)
注意: 列表中的两个元素都包含相同的元素,每个元素的长度都相同.
比较就像
l_lstOne第n个位置有一个'X',那么l_lstTwo中第m个的第n个位置应该被'X'替换.例
l_lstOne l_lstTwo Output
100 000 000
1X0 110 1X0
X11 100 X00
Run Code Online (Sandbox Code Playgroud)
所以,为了解决这个问题,我使用了嵌套for循环,这是我的源代码,
for (int l_nIndex = 0; l_nIndex < l_lstTwo.Count; l_nIndex++)
{
String l_strX = String.Empty;
for (int l_nInnerIndex = 0; l_nInnerIndex < l_lstTwo[l_nInnerIndex].Length; l_nInnerIndex++)
{
l_strX += l_lstOne[l_nIndex][l_nInnerIndex] == 'X' ? 'X' : l_lstTwo[l_nIndex][l_nInnerIndex];
}
l_lstTwo[l_nIndex] = l_strX;
}
Run Code Online (Sandbox Code Playgroud)
这段代码运行正常,但事实是,它需要花费更多的时间来执行,即处理200000个元素和16个长度的每个元素几乎600毫秒.
此外,我需要一个Linq或Lambda方法来解决这个问题.所以请帮我这样做.提前致谢.
LINQ在这里不会帮到你; LINQ不是要修改集合.
您可以通过构建char[]而不是a 来使代码大大加快string.现在,你正在建造320万件string物品+=.
相反,你可以写
char[] l_strX = new char[l_lstTwo[l_nInnerIndex].Length];
for (int l_nInnerIndex = 0; l_nInnerIndex < l_lstTwo[l_nInnerIndex].Length; l_nInnerIndex++)
{
l_strX[l_nInnerIndex] = l_lstOne[l_nIndex][l_nInnerIndex] == 'X' ? 'X' : l_lstTwo[l_nIndex][l_nInnerIndex];
}
l_lstTwo[l_nIndex] = new string(l_strX);
Run Code Online (Sandbox Code Playgroud)