从列表中获取所有不同项目的最快/最有效的方法是什么?
我有一个List<string>
,其中可能包含多个重复项,只需要列表中的唯一值。
答案 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
来存储项目。