检查二维列表中的不同特定字符串

Check for different specific strings in two-dimensional list

我正在尝试检查特定维度中的不同字符串,我很好奇是否可以使用 Linq。

我有两个结构相同的列表。

List<List<string>> List1 = new List<List<string>>() {new List<string>() {"ID1", "A"}, 
                                                     new List<string>() {"ID2", "A"}};

List<List<string>> List2 = new List<List<string>>() {new List<string>() {"ID3", "A"}, 
                                                     new List<string>() {"ID4", "B"}};

我想做的是检查两个嵌套列表之间的差异,但问题是我只想检查 [1] 字符串的嵌套列表之间的差异。

所以..检查上述两个列表之间差异的预期输出将是一个字符串列表。

{"ID4", "B"}

我试过使用:

IEnumerable<List<string>> ListDiff = List1.Except(List2);

但是 ListDiff returns 每个元素,因为嵌套列表中的 [0] 维度。我希望忽略嵌套列表 [0],只检查 [1](在嵌套列表中)。

您仍然可以使用 Except() function which has an overload that takes an IEqualityComparer<T>。您可以自己实现,以便比较列表中的第二项,如下所示:

public class MyListComparer : IEqualityComparer<List<string>>
{
    public bool Equals(List<string> x, List<string> y)
    {
        if (x == null || y == null)
            return false;

        return x[1] == y[1];
    }

    public int GetHashCode(List<string> x)
    {
        if (x == null) return 0;

        return x[1].GetHashCode();
    }
}

然后将此比较器的一个新实例传递给 Except() 函数:

List<List<string>> diff = List2.Except(List1, new MyListComparer()).ToList();

此示例不处理您的列表中的项目数量小于或大于 2 的边缘情况。如果您需要该逻辑,您可以在比较器中相当轻松地自行实现。