109

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

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

4

5 回答 5

172

您可以使用该Distinct方法返回一个IEnumerable<T>不同的项目:

var uniqueItems = yourList.Distinct();

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

var uniqueItemsList = yourList.Distinct().ToList();
于 2009-09-07T09:10:01.830 回答
160

使用HashSet<T>. 例如:

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

印刷

一种
乙
D
C
于 2009-09-07T09:10:54.433 回答
7

您可以使用LINQ的不同扩展方法

于 2009-09-07T09:10:24.367 回答
5

在 .Net 2.0 中,我非常确定这个解决方案:

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;
}
于 2010-12-11T13:41:01.533 回答
4

除了DistinctLINQ 的扩展方法之外,您还可以使用HashSet<T>用您的集合初始化的对象。这很可能比 LINQ 方式更有效,因为它使用哈希码 ( GetHashCode) 而不是IEqualityComparer)。

事实上,如果它适合您的情况,我会首先使用 aHashSet来存储项目。

于 2009-09-07T09:12:44.463 回答