从列表中获取所有不同项目的最快/最有效的方法是什么?
我有一个List<string>
可能有多个重复项,并且只需要列表中的唯一值。
使用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
您可以使用LINQ的不同扩展方法
在 .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;
}
除了Distinct
LINQ 的扩展方法之外,您还可以使用HashSet<T>
用您的集合初始化的对象。这很可能比 LINQ 方式更有效,因为它使用哈希码 ( GetHashCode
) 而不是IEqualityComparer
)。
事实上,如果它适合您的情况,我会首先使用 aHashSet
来存储项目。