当前位置: 首页 > news >正文

NET 4 新增的 SortedSet 类


以下我们来看 .NET 里 HashSet 的一些示例:


示例一 - 测试查找的功能:

var set = new HashSet<char>("我爱编程");

Response.Write(set.Contains('我')); //True
Response.Write(set.Contains('你')); //False

上述示例中,我们能够将字符串,甚至中文字,传入 HashSet<char> 的构造函数,是因为 string 实现了 IEnumerable<char> 接口,而 HastSet 类也实现了 IEnumerable<T>。


示例二 - 测试 HashSet 内置的一些好用方法:

  1. SymmetricExceptWith: 仅包含该对象或指定集合中存在的元素(但不可同时包含两者中的元素)。
  2. UnionWith: 包含该对象本身和指定集合中存在的所有元素。
  3. ExceptWith: 从当前 HashSet<T> 对象中移除指定集合中的所有元素。
  4. IntersectWith: 仅包含该对象和指定集合中存在的元素。

using System;
using System.Collections.Generic;

class HashSetDemo
{
static void Main()
{
HashSet<char> setA = new HashSet<char>();
HashSet<char> setB = new HashSet<char>();

setA.Add('A');
setA.Add('B');
setA.Add('C');

setB.Add('C');
setB.Add('D');
setB.Add('E');

Show("Initial content of setA: ", setA);
Show("Initial content of setB: ", setB);

setA.SymmetricExceptWith(setB); //把 setA、setB 各自特有、对方没有的元素列出来
Show("setA after Symmetric difference with SetB: ", setA);

setA.UnionWith(setB); //把 setA、setB 的全部元素列出来 (union 并集)
Show("setA after union with setB: ", setA);

setA.ExceptWith(setB); //把 setA 中,所拥有的 setB 元素移除
Show("setA after subtracting setB: ", setA);

Console.WriteLine();
Console.Read();
}

static void Show(string msg, HashSet<char> set)
{
Console.Write(msg);
foreach (char ch in set)
Console.Write(ch + " ");
Console.WriteLine();
}
}

执行结果:


图 3 测试 SymmetricExceptWith、UnionWith、ExceptWith 方法

setA.IntersectWith(setB); //把 setA 中,所拥有的 setB 元素列出
Show("setA after intersect with setB: ", setA);

执行结果:


图 4 测试 IntersectWith 方法


由于 HastSet<T> 实现了 IEnumerable<T> 接口,因此我们可把其他任何 set 当作参数,传入其他 set 类的运算方法里。


此外,LINQ 也有类似上述示例的 Intersect、Except、Union、Distinct 的 set 运算功能,有兴趣比较两者特性的网友,可参考 msdn 或网络上的文章 [5]。主要的差别在于,LINQ set 运算始终返回新的 IEnumerable<T> 集合,而 HashSet<T> 是修改当前的集合,且 HashSet 提供了比较多的 set 相关算符。

------------------------------------------------------------------------


到了 .NET 4 才新建的 SortedSet 类,除了有前述 HashSet 类所拥有的 SymmetricExceptWith、UnionWith、ExceptWith、IntersectWith 等好用的方法外,还有「GetViewBetween (制定范围)」、「Max (取最大值)」、「Min (取最小值)」等新增的好用方法。


以下我们来看 SortedSet 这三个方法的示例:


示例三 - 测试 GetViewBetween、Max、Min 方法:

using System;
using System.Collections.Generic;
using System.Linq; //此为 Max()、Min() 方法的必要引用

var set = new SortedSet<int>() { 5, 9, 2, 1, 2, 2, 3, 7, 4, 9, 9 };

foreach (int element in set)
Response.Write(string.Format(" {0}", element));

Response.Write("<p>");
Response.Write("Max: " + set.Max() + "<br>");
Response.Write("Min: " + set.Min() + "<br>");

Response.Write("<br>取 2 ~ 5 之间的值: <br>");

//只取值为 2 ~ 5 之间的元素
var subSet = set.GetViewBetween(2, 5);
foreach (int i in subSet)
{
Response.Write(i + ",");
}

执行结果:


图 5 测试 SortedSet 类专属的 GetViewBetween、Max、Min 方法

http://www.jsqmd.com/news/1131162/

相关文章:

  • MIT App Inventor终极指南:零代码打造Android和iOS应用的完整方案
  • 5分钟终极指南:在Windows系统免费安装苹果苹方字体
  • Kimi K2.5 vs DeepSeek Coder V2:大型代码库中的AI编码助手选型指南
  • 国产色选机技术解析与市场应用指南
  • 水下图像增强技术:多目标优化与MOPSO算法实践
  • 雷达图像实例分割技术:Mask R-CNN改进与应用
  • YOLOv11目标检测算法解析与实战指南
  • Qwen3.5-Plus vs GPT-5.2硬刚实测:开源大模型性能验证方法论
  • 电力设备红外可见光配准 MATLAB 2024b 实战:CAO-C2F 算法 3 步复现与 5 大公开数据集测试
  • Windows系统JMeter性能测试环境搭建与配置实战指南
  • 零门槛接入DeepSeek:用CC Switch为Codex配置国产大模型
  • Linux命令-reject(拒绝打印任务)
  • CATANet:基于内容感知Token聚合的图像超分辨率技术解析
  • 基于深度学习的视觉雨强识别技术解析
  • 蒙特卡洛 vs 时序差分:GridWorld 迷宫 10 万步训练,收敛速度与方差实测对比
  • 从OpenAI迁移到DeepSeek-V3:无缝对接实战指南与兼容性处理
  • AI视觉识别监控系统:从技术原理到应用实践
  • YOLOv12课程式难例挖掘技术解析与实践
  • 宝塔面板SSH密钥登录配置指南:从原理到实战安全加固
  • OneNote到Markdown迁移:3步实现95%格式保留的专业方案
  • GPT-5.5是假的!揭秘AI编程模型真实技术图谱
  • YOLOv12多模态目标检测:MM_SFS模块设计与实现
  • 如何快速提升密码安全性:zxcvbn密码强度评估工具完全指南
  • Go项目实战:构建多层防御体系应对XSS与CSRF攻击
  • 跨平台UI开发中的AI代理与MCP协议实践
  • 智能视频监控:三维重建与动态模型技术解析
  • 遥感影像分析技术:从特征提取到场景理解
  • 羽毛球姿态评估系统设计:基于OpenPose与局部余弦相似度的6方案对比
  • Google Authenticator 完整指南:3分钟上手TOTP两步验证,保护核心数字资产
  • VK视频下载器:轻松保存VKontakte视频的完整指南