检查二维列表中的不同特定字符串
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 的边缘情况。如果您需要该逻辑,您可以在比较器中相当轻松地自行实现。
我正在尝试检查特定维度中的不同字符串,我很好奇是否可以使用 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 的边缘情况。如果您需要该逻辑,您可以在比较器中相当轻松地自行实现。