比较 c# 中的两个 List<string> 并找到重复项
Compare two List<string> in c# and find the duplicates
我试过这里的方法:
- Compare two List<string> and print the duplicates
- Is there any way to compare two lists in C#
- https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/linq/how-to-find-the-set-difference-between-two-lists-linq.
None 以上解决了我的问题。
我有两个列表,List1 和 List2。 List2 是一个 .txt 文件,读入一个字符串,然后用逗号分割成一个列表。 List1 是使用“-”拆分的浏览器句柄的输出。因此,例如,List1 具有项目“Stack Overflow”、“Personal”、“Microsoft Edge”,而 List2 具有项目“Personal”和“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");
}
尽管我认为 intersect 会找到任何类型的重复项并将其提供给列表,但它总是会抛出一个否。明确地说,我希望结果是“个人”和“Microsoft Edge”。我也试过
bool match = List1.Contains(TextDoc);
if (match)
{
Console.WriteLine("Match");
}
else
{
Console.WriteLine("no Match");
}
TextDoc 只是使用 File.ReadAllText 读入字符串的 txt 文档。这些选项都没有给我一个匹配项,尽管据我所知,它们都应该给出列表的上下文。
我在这里错过了一些非常明显的东西吗?
even though I thought intersect would find ANY sort of duplicates and give it to the list
你的想法是正确的。
Am I missing something super obvious here?
你没有得出简单明了的结论:你假设 List1 和 List2 之间有一些重复的字符串很简单不正确。
在调试器中仔细检查两个列表中的字符串。不要相信您对列表中的字符串的假设。当调用 Intersect 方法时,您已经获得了两个列表中没有重复项的证据。在调用 Intersect 方法的确切时刻非常仔细地验证两个列表中的内容。
附带说明:还要记住,有些 Unicode 控制字符是不可见的(但在调试器中检查字符串应该会显示此类控制字符),并且有不同的 Unicode 字符即使不完全相同也看起来相似(取决于使用的字体)尽管是不同的字符。您的字符串可能具有其中一个或另一个特征,使它们看起来相同但实际上包含不同的字符序列,因此本质上使它们成为不相等的字符串。
我试过这里的方法:
- Compare two List<string> and print the duplicates
- Is there any way to compare two lists in C#
- https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/linq/how-to-find-the-set-difference-between-two-lists-linq.
None 以上解决了我的问题。
我有两个列表,List1 和 List2。 List2 是一个 .txt 文件,读入一个字符串,然后用逗号分割成一个列表。 List1 是使用“-”拆分的浏览器句柄的输出。因此,例如,List1 具有项目“Stack Overflow”、“Personal”、“Microsoft Edge”,而 List2 具有项目“Personal”和“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");
}
尽管我认为 intersect 会找到任何类型的重复项并将其提供给列表,但它总是会抛出一个否。明确地说,我希望结果是“个人”和“Microsoft Edge”。我也试过
bool match = List1.Contains(TextDoc);
if (match)
{
Console.WriteLine("Match");
}
else
{
Console.WriteLine("no Match");
}
TextDoc 只是使用 File.ReadAllText 读入字符串的 txt 文档。这些选项都没有给我一个匹配项,尽管据我所知,它们都应该给出列表的上下文。 我在这里错过了一些非常明显的东西吗?
even though I thought intersect would find ANY sort of duplicates and give it to the list
你的想法是正确的。
Am I missing something super obvious here?
你没有得出简单明了的结论:你假设 List1 和 List2 之间有一些重复的字符串很简单不正确。
在调试器中仔细检查两个列表中的字符串。不要相信您对列表中的字符串的假设。当调用 Intersect 方法时,您已经获得了两个列表中没有重复项的证据。在调用 Intersect 方法的确切时刻非常仔细地验证两个列表中的内容。
附带说明:还要记住,有些 Unicode 控制字符是不可见的(但在调试器中检查字符串应该会显示此类控制字符),并且有不同的 Unicode 字符即使不完全相同也看起来相似(取决于使用的字体)尽管是不同的字符。您的字符串可能具有其中一个或另一个特征,使它们看起来相同但实际上包含不同的字符序列,因此本质上使它们成为不相等的字符串。