从列表中获取唯一项目

时间:2009-09-07 09:08:39

标签: c# list unique

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

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

5 个答案:

答案 0 :(得分:134)

使用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);

打印

A
B
D
C

答案 1 :(得分:127)

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

var uniqueItems = yourList.Distinct();

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

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

答案 2 :(得分:6)

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

答案 3 :(得分:6)

在.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;
}

答案 4 :(得分:4)

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

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