如何从 C# 中的 StringCollection 中删除重复项?

发布于 2024-08-29 08:15:38 字数 83 浏览 3 评论 0原文

如何从 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

毁我热情 2024-09-05 08:15:38

只需使用 HashSet作为您的集合,而不是 StringCollection。它旨在通过比较这些元素的哈希码来防止添加重复元素(因此非常有效)。

编辑:由于似乎首先返回一个StringCollection,那么解决方案应该是循环遍历StringCollection<中的所有项目/code> 并将它们添加到 HashSet 中,从而消除重复项。 Enumerable.Distinct 扩展方法也会完成这项工作,但我怀疑效率较低,因为它确实使用散列(而只是正常的相等测试)。像这样的东西:

var noDuplicatesItems = stringCollection.Cast<string>().Distinct().ToArray();

Just use a HashSet<string> as your collection, rather than StringCollection. 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 the StringCollection and add them to a HashSet<string>, thereby eliminating duplicates. The Enumerable.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:

var noDuplicatesItems = stringCollection.Cast<string>().Distinct().ToArray();
夏日落 2024-09-05 08:15:38
    StringCollection s = new StringCollection();
    s.Add("s");
    s.Add("s");
    s.Add("t");

    var uniques = s.Cast<IEnumerable>();
    var unique = uniques.Distinct();

    foreach (var x in unique)
    {
        Console.WriteLine(x);
    }

    Console.WriteLine("Done");
    Console.Read();

未测试效率。

    StringCollection s = new StringCollection();
    s.Add("s");
    s.Add("s");
    s.Add("t");

    var uniques = s.Cast<IEnumerable>();
    var unique = uniques.Distinct();

    foreach (var x in unique)
    {
        Console.WriteLine(x);
    }

    Console.WriteLine("Done");
    Console.Read();

Not tested for efficiency.

半衾梦 2024-09-05 08:15:38

如果您使用的是 Framework v3.5(或更高版本),那么您可以首先转换为 IEnumerable,然后调用 Distinct() 方法在那方面; IE:

// where foo is your .Collections.Specialized.StringCollection
IEnumerable<string> distinctList = foo.OfType<string>.Distinct()

If you're in v3.5 of the Framework (or later), then you can first convert to an IEnumerable<string>, and then call the Distinct() method on that; ie:

// where foo is your .Collections.Specialized.StringCollection
IEnumerable<string> distinctList = foo.OfType<string>.Distinct()
归属感 2024-09-05 08:15:38

使用linq:myCollection.Cast.Distinct().ToList();
或者您可以使用 Noldorin 建议的 HashSet

using linq: myCollection.Cast<string>.Distinct().ToList();
or you can use a HashSet as Noldorin proposed

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文