从列表中获取所有不同项目的最快/最有效的方法是什么?
I have a List<string> that possibly has multiple repeating items in it and only want the unique values within the list.
List<string>
You can use the Distinct method to return an IEnumerable<T> of distinct items:
Distinct
IEnumerable<T>
var uniqueItems = yourList.Distinct();
如果您需要返回的独特项目序列作为 List<T>,您可以添加对 ToList的调用:
List<T>
ToList
var uniqueItemsList = yourList.Distinct().ToList();
您可以使用来自 LINQ 的 很明显扩展方法
使用 HashSet<T>,例如:
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)。
GetHashCode
IEqualityComparer
事实上,如果它适合您的情况,我会首先使用 HashSet来存储项目。
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; }