导读:本期聚焦于小伙伴创作的《C#怎么使用HashSet集合?C# HashSet去重和集合运算教程》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C#怎么使用HashSet集合?C# HashSet去重和集合运算教程》有用,将其分享出去将是对创作者最好的鼓励。

在C#开发中,HashSet是一个常用的集合类型,它基于哈希表实现,存储的元素具有唯一性,不会存在重复值,同时支持高效的添加、删除、查找操作,还内置了多种集合运算方法,非常适合处理需要去重或者集合操作的场景。

C#怎么使用HashSet集合?C# HashSet去重和集合运算教程

HashSet的基本创建与初始化

使用HashSet前需要先引入System.Collections.Generic命名空间,我们可以通过无参构造函数创建空集合,也可以在初始化时传入初始元素。

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        // 创建空的HashSet
        HashSet<int> emptySet = new HashSet<int>();
        
        // 初始化时添加元素
        HashSet<string> initSet = new HashSet<string> { "apple", "banana", "orange" };
        
        Console.WriteLine("初始集合元素:");
        foreach (var item in initSet)
        {
            Console.WriteLine(item);
        }
    }
}

使用HashSet实现数据去重

HashSet最核心的特性就是元素唯一,当我们向集合中添加重复元素时,添加操作会返回false,且集合不会发生变化,利用这个特性可以很方便地实现数据去重。

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<int> rawData = new List<int> { 1, 2, 3, 2, 4, 1, 5, 3 };
        HashSet<int> distinctSet = new HashSet<int>(rawData);
        
        Console.WriteLine("去重后的元素:");
        foreach (var num in distinctSet)
        {
            Console.WriteLine(num);
        }
        
        // 尝试添加重复元素
        bool addResult = distinctSet.Add(2);
        Console.WriteLine($"添加重复元素2的结果:{addResult}"); // 输出False
        Console.WriteLine($"添加后集合元素数量:{distinctSet.Count}"); // 数量不变
    }
}

HashSet的集合运算方法

HashSet内置了多种集合运算方法,无需手动编写循环即可完成并集、交集、差集等操作,常用方法如下:

  • UnionWith:计算当前集合与另一个集合的并集,结果保存到当前集合
  • IntersectWith:计算当前集合与另一个集合的交集,结果保存到当前集合
  • ExceptWith:计算当前集合与另一个集合的差集,结果保存到当前集合
  • SymmetricExceptWith:计算当前集合与另一个集合的对称差集(仅在一个集合中的元素),结果保存到当前集合
  • IsSubsetOf:判断当前集合是否是另一个集合的子集
  • IsSupersetOf:判断当前集合是否是另一个集合的超集

集合运算示例

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        HashSet<int> setA = new HashSet<int> { 1, 2, 3, 4 };
        HashSet<int> setB = new HashSet<int> { 3, 4, 5, 6 };
        
        // 并集运算
        HashSet<int> unionSet = new HashSet<int>(setA);
        unionSet.UnionWith(setB);
        Console.WriteLine("并集结果:");
        PrintSet(unionSet); // 输出1,2,3,4,5,6
        
        // 交集运算
        HashSet<int> intersectSet = new HashSet<int>(setA);
        intersectSet.IntersectWith(setB);
        Console.WriteLine("交集结果:");
        PrintSet(intersectSet); // 输出3,4
        
        // 差集运算 setA - setB
        HashSet<int> exceptSet = new HashSet<int>(setA);
        exceptSet.ExceptWith(setB);
        Console.WriteLine("差集结果(setA - setB):");
        PrintSet(exceptSet); // 输出1,2
        
        // 对称差集运算
        HashSet<int> symmetricSet = new HashSet<int>(setA);
        symmetricSet.SymmetricExceptWith(setB);
        Console.WriteLine("对称差集结果:");
        PrintSet(symmetricSet); // 输出1,2,5,6
        
        // 子集判断
        HashSet<int> subSet = new HashSet<int> { 1, 2 };
        Console.WriteLine($"subSet是否是setA的子集:{subSet.IsSubsetOf(setA)}"); // 输出True
    }
    
    static void PrintSet(HashSet<int> set)
    {
        foreach (var item in set)
        {
            Console.Write(item + " ");
        }
        Console.WriteLine();
    }
}

HashSet的常用属性和方法总结

除了上述提到的功能,HashSet还有以下常用属性和方法:

属性/方法说明
Count获取集合中元素的数量
Add(T item)向集合中添加元素,添加成功返回true,元素已存在返回false
Remove(T item)从集合中移除指定元素,移除成功返回true,元素不存在返回false
Contains(T item)判断集合是否包含指定元素,包含返回true,否则返回false
Clear()清空集合中的所有元素

使用注意事项

在使用HashSet时需要注意,HashSet不保证元素的存储顺序,遍历输出的顺序不一定和添加顺序一致。如果需要有序的唯一集合,可以考虑使用SortedSet。另外,HashSet中的元素类型需要正确实现GetHashCodeEquals方法,否则可能导致去重和集合运算结果不符合预期。

C#HashSet去重集合运算修改时间:2026-06-27 08:21:29

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。