从列表中获取独特的项目

从列表中获取所有不同项目的最快/最有效的方法是什么?

我有一个List<string> ,可能有多个重复的项目,只需要列表中的唯一值。

使用HashSet<T> 。 例如:

 var items = "ABADAC".Split(' '); var unique_items = new HashSet<string>(items); foreach (string s in unique_items) Console.WriteLine(s); 

版画

一个
乙
 d
 C

您可以使用Distinct方法来返回不同项目的IEnumerable<T>

 var uniqueItems = yourList.Distinct(); 

如果您需要以List<T>返回的唯一项目序列,则可以添加对ToList的调用:

 var uniqueItemsList = yourList.Distinct().ToList(); 

您可以使用来自LINQ的Distinct扩展方法

在.Net 2.0中,我很确定这个解决scheme:

 public IEnumerable<T> Distinct<T>(IEnumerable<T> source) { List<T> uniques = new List<T>(); foreach (T item in source) { if (!uniques.Contains(item)) uniques.Add(item); } return uniques; } 

除了LINQ的Distinct扩展方法,你可以使用你的集合初始化的HashSet<T>对象。 这比LINQ方式更有效率,因为它使用散列码( GetHashCode )而不是IEqualityComparer )。

事实上,如果它适合你的情况,我只是使用HashSet来存储项目的第一个地方。