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> 是泛型集合,适用于多种类型。

相关推荐
WarrenMondeville9 分钟前
1.Unity面向对象-单一职责原则
unity·设计模式·c#
WarrenMondeville10 分钟前
2.Unity面向对象- 开闭原则
unity·游戏引擎·开闭原则
呆呆敲代码的小Y1 小时前
UnityMCP+Claude+VSCode,构建最强AI游戏开发环境
人工智能·vscode·游戏·unity·游戏引擎·u3d·mcp
C蔡博士1 小时前
Unity TextMeshPro 中文本地化:动态生成最小字体集(解决边缘模糊、乱码问题)
unity·游戏引擎
m0_630182461 小时前
Unity TMP 中文字体生成
unity·游戏引擎
寒风暖哥2 小时前
Oracle视图查询返回空数据集的分析
oracle·c#
万兴丶2 小时前
Unity用C#完成抖音小游戏接入引力引擎(Gravity Engine)完整指南,一篇文章讲清楚!
unity·c#·游戏引擎·抖音
福赖3 小时前
《C#反射机制》
开发语言·c#
向上的车轮4 小时前
熟悉C#如何转TypeScript?
开发语言·typescript·c#
我是唐青枫4 小时前
C#.NET ReaderWriterLockSlim 深入解析:读写锁原理、升级锁与使用边界
开发语言·c#·.net