C#:如何使用Linq/Lambda比较两个集合(System.Collection.Generic.List <T>)?

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)

注意: 列表中的两个元素都包含相同的元素,每个元素的长度都相同.

比较就像

  1. 如果第m个元素在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方法来解决这个问题.所以请帮我这样做.提前致谢.

SLa*_*aks 5

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)