历史上的今天 首页 传统节日 24节气 企业成立时间 今日 问答 北京今日 重庆今日 天津今日 上海今日 深圳今日 广州今日 东莞今日 武汉今日 成都今日 澳门今日 乌鲁木齐今日 呼和浩特今日 贵阳今日 昆明今日 长春今日 哈尔滨今日 沈阳今日 西宁今日 兰州今日 西安今日 太原今日 青岛今日 合肥今日 南昌今日 长沙今日 开封今日 洛阳今日 郑州今日 保定今日 石家庄今日 温州今日 宁波今日 杭州今日 无锡今日 苏州今日 南京今日 南宁今日 佛山今日 中文/English
首页 > 问答 > JiaoJie在C#编程中如何实现两个集合的交集运算?

JiaoJie在C#编程中如何实现两个集合的交集运算?

红豆姐姐的育儿日常

问题更新日期:2026-01-25 06:42:55

问题描述

如何高效且安全地获取两个集合的共同元素?在C#中实现集合交
精选答案
最佳答案
如何高效且安全地获取两个集合的共同元素?

在C#中实现集合交集运算主要有三种方式,具体选择需结合数据规模和性能需求。以下是核心实现方法及对比:

一、LINQ的Intersect方法

通过LINQ扩展方法直接获取交集,代码简洁但需注意元素类型需实现

plaintext
复制
IEquatable<T>
或依赖默认的
plaintext
复制
Equals
plaintext
复制
GetHashCode

csharp
复制
varlist1=newList<int>{1,2,3}; varlist2=newList<int>{3,4,5}; varresult=list1.Intersect(list2).ToList();//输出()

二、HashSet的交集操作

利用

plaintext
复制
HashSet<T>
plaintext
复制
IntersectWith
方法或构造函数,适合需要频繁交集运算的场景。

csharp
复制
varhash1=newHashSet<int>{1,2,3}; varhash2=newHashSet<int>{3,4,5}; hash1.IntersectWith(hash2);//hash1变为{3}

三、手动实现(不推荐)

通过循环遍历比较元素,适用于自定义类型且需自定义比较逻辑的场景。

csharp
复制
varcommon=newList<int>(); foreach(variteminlist1) if(list2.Contains(item)) common.Add(item);
方法适用场景性能特点依赖项
LINQIntersect代码简洁性优先O(n)时间复杂度System.Linq
HashSetIntersectWith高频交集运算O(n)时间复杂度System.Collections.Generic
手动实现自定义比较逻辑O(n2)时间复杂度

注意事项

  1. 集合元素类型需正确实现
    plaintext
    复制
    Equals
    plaintext
    复制
    GetHashCode
    方法,否则可能导致误判。
  2. 对于大数据量场景,优先使用
    plaintext
    复制
    HashSet
    或LINQ,避免手动实现的性能损耗。
  3. 若需保留原始集合,使用
    plaintext
    复制
    Intersect
    方法返回新集合而非修改原集合。

友情链接: