C#中SortedSet怎么用?有序集合自动排序基础教程

来源:开发教程作者:马来西亚程序员头衔:程序员
导读:本期聚焦于小伙伴创作的《C#中SortedSet怎么用?有序集合自动排序基础教程》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C#中SortedSet怎么用?有序集合自动排序基础教程》有用,将其分享出去将是对创作者最好的鼓励。

C#中的SortedSet是System.Collections.Generic命名空间下的一个泛型集合类,它的核心特点是会对添加的元素自动进行排序,并且保证集合内的元素不会重复,非常适合需要有序无重复数据的业务场景。

C#中SortedSet怎么用?有序集合自动排序基础教程

SortedSet基础特性

SortedSet的排序规则默认遵循元素的自然排序顺序,对于数值类型会按从小到大排列,对于字符串会按字典序排列。如果添加重复元素,集合不会报错,但是会直接忽略该元素,不会将其加入集合中。

使用前需要先引入对应的命名空间:

using System.Collections.Generic;

常用操作方法

创建与添加元素

创建SortedSet后可以通过Add方法添加元素,添加后会自动触发排序逻辑:

// 创建存储整数的SortedSet
SortedSet<int> numberSet = new SortedSet<int>();
// 添加元素
numberSet.Add(5);
numberSet.Add(2);
numberSet.Add(8);
numberSet.Add(2); // 重复元素,不会被加入集合

// 遍历输出,会自动按从小到大顺序展示
foreach (int num in numberSet)
{
    Console.WriteLine(num);
}
// 输出结果:2 5 8

删除与查找元素

SortedSet提供了Remove方法删除指定元素,Contains方法判断元素是否存在:

SortedSet<string> nameSet = new SortedSet<string>();
nameSet.Add("张三");
nameSet.Add("李四");
nameSet.Add("王五");

// 判断元素是否存在
bool hasLi = nameSet.Contains("李四"); // 返回true
// 删除元素
bool isRemoved = nameSet.Remove("张三"); // 返回true,删除成功

// 遍历剩余元素,按字典序排列
foreach (string name in nameSet)
{
    Console.WriteLine(name);
}
// 输出结果:李四 王五

获取子集与范围操作

SortedSet支持获取指定范围内的子集,通过GetViewBetween方法实现:

SortedSet<int> scoreSet = new SortedSet<int> { 60, 75, 82, 90, 95 };
// 获取分数在70到90之间的子集(包含边界值)
SortedSet<int> subSet = scoreSet.GetViewBetween(70, 90);

foreach (int score in subSet)
{
    Console.WriteLine(score);
}
// 输出结果:75 82 90

与其他集合的对比

为了更清晰了解SortedSet的适用场景,我们将其和常见的集合做简单对比:

集合类型是否排序是否允许重复典型适用场景
List<T>需要按顺序存储可重复元素的场景
HashSet<T>只需要去重不需要排序的场景
SortedSet<T>需要去重且自动排序的场景

自定义排序规则

如果默认排序规则不符合需求,可以在创建SortedSet时传入自定义的比较器,比如让整数按从大到小排序:

// 自定义比较器,实现从大到小排序
class DescComparer : IComparer<int>
{
    public int Compare(int x, int y)
    {
        // 反转默认比较结果即可实现降序
        return y.CompareTo(x);
    }
}

// 使用自定义比较器创建SortedSet
SortedSet<int> descSet = new SortedSet<int>(new DescComparer());
descSet.Add(3);
descSet.Add(1);
descSet.Add(7);

foreach (int num in descSet)
{
    Console.WriteLine(num);
}
// 输出结果:7 3 1

使用注意事项

  • SortedSet的元素类型必须实现IComparable<T>接口,否则无法完成自动排序,自定义类型需要手动实现该接口或者传入自定义比较器。
  • 添加、删除、查找操作的时间复杂度都是O(log n),相比HashSet的O(1)会稍高,所以如果是只需要去重不需要排序的场景,优先选择HashSet。
  • GetViewBetween方法返回的是原集合的视图,修改视图会影响原集合,修改原集合也会影响视图,使用时需要注意数据的联动变化。

C#SortedSet有序集合自动排序修改时间:2026-06-27 06:06:14

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