从列表中获取独特的项目
从列表中获取所有不同项目的最快/最有效的方法是什么?
我有一个List<string>
,可能有多个重复的项目,只需要列表中的唯一值。
使用HashSet<T>
。 例如:
var items = "ABADAC".Split(' '); var unique_items = new HashSet<string>(items); foreach (string s in unique_items) Console.WriteLine(s);
版画
一个 乙 d C
您可以使用Distinct
方法来返回不同项目的IEnumerable<T>
:
var uniqueItems = yourList.Distinct();
如果您需要以List<T>
返回的唯一项目序列,则可以添加对ToList
的调用:
var uniqueItemsList = yourList.Distinct().ToList();
您可以使用来自LINQ的Distinct扩展方法
在.Net 2.0中,我很确定这个解决scheme:
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
)。
事实上,如果它适合你的情况,我只是使用HashSet
来存储项目的第一个地方。