从列表集合中删除重复项

3
希望有人能帮助我。我正在使用c#,对此还比较陌生。我正在将一个文本文件加载到我的应用程序中,并在“,”上拆分数据。当读取字符串的一部分时,我会将其读入<list>中。当数据被读取时,会出现很多不同的重复项,这取决于我加载的txt文件。有没有人能告诉我如何检查并删除所有出现的重复项。由于可能存在无限的可能性,因此无法知道会出现哪些重复项。提前感谢您的帮助。
4个回答

7
如果您的目标是.NET 3.5,请使用Distinct扩展方法:
var deduplicated = list.Distinct();

4
如果您将字符串加载到Set而不是List中,则重复项会自动丢弃。

设置听起来不错 - 但我会检查它用于distinct的策略。希望它使用具有o(1)特性的哈希,如果它使用具有o(n)的列表枚举 - 切换到使用Dictionary<type,object>并使用null作为值。 - stephbu
我的理解是它是哈希(相当于一个没有关联值的键Dictionary)。 - ChrisW

2
下面是一个简单/粗略的示例:
public List<string> RemoveDuplicates(List<string> listWithDups)
{
   cleanList = new List<string>();
   foreach (string s in listWithDups)
   {
      if (!cleanList.Contains(s))
         cleanList.Add(s);
   }
   return cleanList;
}

作为一种警告:对于非常大的字符串,使用String.Split可能会消耗大量的内存并导致出现异常。

1

这里有一篇关于C#的文章,其中包含一些示例和解释。基本上,您只需跟踪唯一值,并检查每个元素。

Alex


我正在尝试这种方式,但是出现了一个错误,提示“错误:无法隐式转换类型System.Collections.Generic.IEnumerable<HKstats.Friendly>'到'System.Collections.Generic.IEnumerable<string>'。存在显式转换(您是否缺少强制转换?)\Projects\HKstats\HKstats\stats.v1.01.cs”。 - Brady

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接