这个问题在这里已有答案:
从列表中获取所有不同项目的最快/最有效方法是什么?
我有一个 List<string> ,可能有多个重复项,只需要列表中的唯一值 .
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);
版画
A B D C
您可以使用Distinct方法返回 IEnumerable<T> 个不同的项目:
IEnumerable<T>
var uniqueItems = yourList.Distinct();
如果您需要以 List<T> 形式返回的唯一项目序列,则可以添加对ToList的调用:
List<T>
var uniqueItemsList = yourList.Distinct().ToList();
您可以使用LINQ的Distinct扩展方法
在.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; }
除了LINQ的 Distinct 扩展方法之外,您还可以使用初始化集合的HashSet<T>对象 . 这很可能比LINQ方式更有效,因为它使用哈希码( GetHashCode )而不是 IEqualityComparer ) .
Distinct
GetHashCode
IEqualityComparer
事实上,如果它适合您的情况,我会首先使用 HashSet 存储项目 .
HashSet
5 回答
使用HashSet<T> . 例如:
版画
您可以使用Distinct方法返回
IEnumerable<T>
个不同的项目:如果您需要以
List<T>
形式返回的唯一项目序列,则可以添加对ToList的调用:您可以使用LINQ的Distinct扩展方法
在.Net 2.0中我非常肯定这个解决方案:
除了LINQ的
Distinct
扩展方法之外,您还可以使用初始化集合的HashSet<T>对象 . 这很可能比LINQ方式更有效,因为它使用哈希码(GetHashCode
)而不是IEqualityComparer
) .事实上,如果它适合您的情况,我会首先使用
HashSet
存储项目 .