C#语法:HashSet与List对比,适合场景

在 C# 里,如果我们有一组固定的字符串,并且需要频繁判断"某个字符串是否在这组数据里",很多人第一反应会写成 List<string>.Contains(...)或者for循环判断。

这种写法当然没错,但如果这个判断出现在循环、递归或者高频调用的方法里,更合适的选择通常是 HashSet<string>。

一、实例

cs 复制代码
public static List<string> AnatomyTypeIds = new()
{
    "organ_system-5000",
    "lymphatic_system-5122",
    "muscle_system-5376",
    "articulation_system-6100",
    "skeletal_system-7426",
    "arterial_system-6416",
    "venous_system-6978",
    "heart_system-7398",
    "peripheral_nervous_system-7409"
};
private HashSet<string> AnatomyTypeIdsSet =
    new HashSet<string>(AnatomyTypeIds);

public bool IsAnatomyTypeId(string modelId) =>
    AnatomyTypeIdsSet.Contains(modelId);

用法跟 List<string>.Contains都差不多

二、HashSet<string> 到底是什么

`HashSet<string>`` 是一个"集合"类型。

它最核心的特点不是"保存顺序",而是:

  • 用来存一组不重复的值
  • 适合做"某个值是否存在"的判断
  • Contains(...) 的查找效率通常很高

可以把它理解成一个"查名单"的结构。

如果你只是想问:

"这个字符串在不在这组字符串里?"

那 HashSet<string> 往往比 List<string> 更适合。

三、它和 List<string> 的区别

很多时候,List<string> 和 HashSet<string> 都能完成任务,但它们擅长的方向不同。

List<string> 更适合这些情况

  • 你关心元素顺序
  • 你需要按索引访问
  • 你主要是遍历,不是频繁查成员
  • 数据量很小,而且只判断几次

HashSet<string> 更适合这些情况

  • 你主要操作是 Contains
  • 你会频繁判断"某个字符串在不在集合里"
  • 你不关心顺序
  • 你希望自动去重

一句话总结就是:

List<string> 更像"有顺序的名单",
HashSet<string> 更像"快速验票名单"。

本文用 HashSet<string> 做示例,但本质上 HashSet<T> 是泛型集合,适用于多种类型。

相关推荐
逝水无殇17 分钟前
C# 特性详解
开发语言·后端·c#
LongtengGensSupreme1 小时前
C#图像内存高速拷贝:使用Marshal.AllocHGlobal与ArrayPool实现内存拷贝的几个方法
开发语言·数码相机·c#
玖玥拾2 小时前
Unity 3D 基础(一)Unity基础架构、物理系统、视觉渲染、空间变换与对象查询
笔记·游戏·3d·unity·游戏引擎
影寂ldy3 小时前
C# 五大加密算法全套实战(AES/DES对称、RSA非对称、MD5/SHA256哈希)
开发语言·c#·哈希算法
互联网底层民工3 小时前
异步 / 多线程并发(高频八股 · 详解版)
c#
逝水无殇4 小时前
C# 反射详解
开发语言·后端·c#
神秘的MT4 小时前
SQL Server 分页查询 ROW_NUMBER () OFFSET...FETCH游标(Cursor) 数据插入
数据库·sql·学习·c#·winform
我才是银古4 小时前
一个人写出的 3D 几何引擎:Ara3D SDK 技术深度剖析
c#·三维几何·ai平台