使用LINQ比较两个列表

Dot*_*ude 0 linq asp.net linq-to-objects

如果我有2个字符串列表:

List<string> firstList = new List<string>("010", "111", "123");
List<string> secondList = new List<string>("010", "111", "999");
Run Code Online (Sandbox Code Playgroud)

如何比较列表中每个项目中的每个字符?例如:应将"0"与"0","1"与"1","0"与"0"进行比较,依此类推.似乎我可以使用,SelectMany但我坚持如何做到这一点

编辑:

这些列表在相互比较时应该返回true(因为星号表示任何字符,我正在验证以确保每个项目的长度恰好为3个字符)

List<string> firstList = new List<string>("010", "111", "123");
List<string> secondList = new List<string>("010", "1*1", "***");
Run Code Online (Sandbox Code Playgroud)

Las*_*olt 5

更新了通配符

class WildcardStringComparer : IEqualityComparer<string>
{
    public bool Equals(string s1, string s2)
    {
        if (s1.Length != s2.Length) return false;

        for (int i = 0; i < s1.Length; i++)
        {
            if (s1[i] != s2[i] && s1[i] != '*' && s2[i] != '*')
                return false;
        }

        return true;
    }


    public int GetHashCode(string obj)
    {
        throw new NotImplementedException();
    }
}
Run Code Online (Sandbox Code Playgroud)

结果:

List<string> firstList = new List<string>{"010", "111", "999"};
List<string> secondList = new List<string>{"010", "111", "999"};

bool res = firstList.SequenceEqual(secondList, new WildcardStringComparer()); // True
Run Code Online (Sandbox Code Playgroud)

和

List<string> firstList = new List<string>{"010", "111", "999"};
List<string> secondList = new List<string>{"010", "111", "*99"};

bool res = firstList.SequenceEqual(secondList, new WildcardStringComparer()); // True
Run Code Online (Sandbox Code Playgroud)

和

List<string> firstList = new List<string>{"010", "111", "999"};
List<string> secondList = new List<string>{"010", "111", "199"};

bool res = firstList.SequenceEqual(secondList, new WildcardStringComparer()); // False
Run Code Online (Sandbox Code Playgroud)

  • +1:使用自定义比较器看起来像这种情况下的方式,看起来很干净. (2认同)