比较<string> c# 中的两个列表并查找重复项



我已经尝试了以下方法:

  • 比较两个List并打印副本
  • 在c#中有没有办法比较两个列表?
  • https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/linq/how-to-find-the-set-difference-between-two-lists-linq。

以上都不能解决我的问题。

我有两个列表,List1和List2。List2是一个.txt文件,它被读入一个字符串,然后用逗号分割成一个列表。清单1是使用'-'分割的浏览器句柄的输出。例如,清单1有"Stack overflow"、"personal"、"Microsoft Edge",清单2有"personal"one_answers"Microsoft Edge"。所以,这两个表之间有重叠。我试过下面的方法,但没有成功。

List<string> duplicates = List2.Intersect(List1).ToList();
if (duplicates.Count > 0)
{
foreach(var dup in duplicates)
{
Console.WriteLine(dup);
}
}
else
{
Console.WriteLine("No");
}

这总是会抛出一个no,即使我认为相交会找到任何类型的重复并将其提供给列表。明确地说,我希望得到"个人"的结果。和"Microsoft edge"。我也试过

bool match = List1.Contains(TextDoc);
if (match)
{
Console.WriteLine("Match");
}
else
{
Console.WriteLine("no Match");
}

TextDoc只是使用File.ReadAllText读取成字符串的txt文档。这两个选项都不能给我一个匹配,尽管据我所知,它们都应该给出列表的上下文。我是不是错过了什么非常明显的东西?

尽管我认为intersect会找到任何类型的重复并将其提供给列表

你的想法是正确的。

我是不是错过了一些非常明显的东西?

您没有得出直接而简单的结论:您假设在List1List2之间存在一些重复的字符串,这是完全不正确的。

仔细检查两个列表中的字符串在调试器中。不要相信你对列表中字符串的假设。您已经得到了在调用Intersect方法时两个列表中没有重复项的证据。非常仔细地验证在调用Intersect方法的确切时刻,两个列表中的内容。

作为一个边注:还要记住,有些Unicode控制字符是不可见的(但是在调试器中检查字符串应该会显示出这样的控制字符),尽管是不同的字符,但也有不同的Unicode字符看起来相似(取决于所使用的字体)。您的字符串可能会以其中一种或另一种为特征,使它们看起来相同,但实际上包含不同的字符序列,从而实质上使它们成为不相等的字符串。

最新更新