从列表中获取唯一项

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

I have a List<string> that possibly has multiple repeating items in it and only want the unique values within the list.

236756 次浏览

You can use the Distinct method to return an IEnumerable<T> of distinct items:

var uniqueItems = yourList.Distinct();

如果您需要返回的独特项目序列作为 List<T>,您可以添加对 ToList的调用:

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

您可以使用来自 LINQ 的 很明显扩展方法

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

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

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

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