如何从 C# 中的 StringCollection 中删除重复项?
如何从 C# 中的 StringCollection 中删除重复项?我一直在寻找一种更有效的方法。 StringCollection 从 API 返回。
How to remove duplicates from a StringCollection in c#? I was looking for a more efficient approach. StringCollection is returned from an API.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
只需使用
HashSet
作为您的集合,而不是StringCollection
。它旨在通过比较这些元素的哈希码来防止添加重复元素(因此非常有效)。编辑:由于似乎首先返回一个
StringCollection
,那么解决方案应该是循环遍历StringCollection<中的所有项目/code> 并将它们添加到
HashSet
中,从而消除重复项。Enumerable.Distinct
扩展方法也会完成这项工作,但我怀疑效率较低,因为它确实使用散列(而只是正常的相等测试)。像这样的东西:Just use a
HashSet<string>
as your collection, rather thanStringCollection
. It is designed to prevent the addition of duplicate elements by comparing hash codes of those elements (thus being very efficient).Edit: Since it would seem you're returned a
StringCollection
in the first place, then the solution should just be to loop over all the items in theStringCollection
and add them to aHashSet<string>
, thereby eliminating duplicates. TheEnumerable.Distinct
extension method would also do the job, but less efficiently I suspect, since it does use hashing (rather just normal equality testing). Something like this:未测试效率。
Not tested for efficiency.
如果您使用的是 Framework v3.5(或更高版本),那么您可以首先转换为
IEnumerable
,然后调用Distinct()
方法在那方面; IE:If you're in v3.5 of the Framework (or later), then you can first convert to an
IEnumerable<string>
, and then call theDistinct()
method on that; ie:使用linq:
myCollection.Cast.Distinct().ToList();
或者您可以使用 Noldorin 建议的 HashSet
using linq:
myCollection.Cast<string>.Distinct().ToList();
or you can use a HashSet as Noldorin proposed