饱含不重复元素的集合称为”集(set)”. .NET4包含两个集(HashSet<T>和SortedSet<T>),他们都实现ISet<T>接口.HashSet<T>即包含不重复元素的无序列表,SortedSet<T>集包含不重复元素的有序列表.

ISet<T>接口提供的方法可以创建合集,交集,或者给出一个集合时另一个集的超集或子集的信息.

案例:

//使用HashSet:重复的元素自动被移除,但是不排序

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

foreach (var item in set)

{

Console.WriteLine(item);

}

Console.ReadKey();

同样的代码,将HashSet换成SortedSet:

//使用SortedSet:重复的元素自动被移除,还进行了排序

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

foreach (var item in set)

{

Console.WriteLine(item);

}

Console.ReadKey();

总结:

1.HashSet和SortedSet主要的作用是用来进行两个集合求交集,并集,差集等运算. 集合中包含一组不重复出现且无特性顺序的元素.前者不会自动排序,后者会加入元素后,自动排序

2.两者都无法从特定位置访问其中某个元素.

3.可以使用其查找功能:

Set.Contains(“value”) //返回true或false

4.对集合的操作:

a . SymmetricExceptWith:仅包含该对象或指定集合中存在的元素(但不可同时包含两者中的元素).去除交集,剩下两个集合元素.

b . UnionWith:包含该对象本身和制定集合中存在的所有元素. 并集

c . ExceptWith从当前HashSet<T>对象中移除指定集合中的所有元素 . 差集

d . IntersectWith:仅包含该对象和指定集合中存在的元素. 交集

5.SortedSet对象,可以调用GetViewBetween,Max,Min方法

6.除了SortedSet外,System.Collections.Generic命名空间下,还提供了SortedDictionary和SortedList两个类.

测试HashSet内置的一些方法:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace 集

{

class Program

{

static void Main(string[] args)

{

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();

}

}

}

测试SortedSet的方法:

using System;

using System.Collections.Generic;

using System.Linq;//此为Max(),Min()方法的必要调用

using System.Text;

using System.Threading.Tasks;

namespace 集

{

class Program

{

static void Main(string[] args)

{

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

foreach (int element in set)

Console.WriteLine(string.Format(" {0}", element));

Console.WriteLine("Max: " + set.Max() );

Console.WriteLine("Min: " + set.Min() );

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

//只取值为 2 ~ 5 之间的元素

var subSet = set.GetViewBetween(2, 5);

foreach (int i in subSet)

{

Console.Write(i + " ");

}

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();

}

}

}

C#编程(五十五)----------HashSet和SortedSet的更多相关文章

  1. 孤荷凌寒自学python第五十五天初识MongoDb数据库

    孤荷凌寒自学python第五十五天第一天初识MongoDb数据库 (完整学习过程屏幕记录视频地址在文末) 大家好,2019年新年快乐! 本来我想的是借新年第一天开始,正式尝试学习爬虫,结果今天偶然发现 ...

  2. 第三百五十五天 how can I 坚持

    快一年了,三百五十五天了,等写个程序算算时间,看看日期和天数能不能对的上,哈哈. 计划还是未制定,天气预报还是没有写完,立马行动,发完这个博客,立马行动. 计划:设计模式1个月,三大框架3个月,计算机 ...

  3. 第三百五十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy信号详解

    第三百五十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy信号详解 信号一般使用信号分发器dispatcher.connect(),来设置信号,和信号触发函数,当捕获到信号时执行 ...

  4. “全栈2019”Java第五十五章:方法的静态绑定与动态绑定

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  5. 学习ASP.NET Core Razor 编程系列十五——文件上传功能(三)

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  6. 并发编程(十五)——定时器 ScheduledThreadPoolExecutor 实现原理与源码深度解析

    在上一篇线程池的文章<并发编程(十一)—— Java 线程池 实现原理与源码深度解析(一)>中从ThreadPoolExecutor源码分析了其运行机制.限于篇幅,留下了Scheduled ...

  7. OpenCV开发笔记(五十五):红胖子8分钟带你深入了解Haar、LBP特征以及级联分类器识别过程(图文并茂+浅显易懂+程序源码)

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  8. abp(net core)+easyui+efcore实现仓储管理系统——出库管理之六(五十五)

    abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统--ABP总体介绍(一) abp(net core)+ ...

  9. 五十五、linux 编程——TCP 连接和关闭过程及服务器的并发处理

    55.1 TCP 连接和关闭过程 55.1.1 介绍 建立连接的过程就是三次握手的过程:客户端发送 SYN 报文给服务器,服务器回复 SYN+ACK 报文,客户机再发送 ACK 报文. 关闭连接的过程 ...

随机推荐

  1. 钉钉机器人-实现监控通知功能-python

    1. 首先得创建有 一个 钉钉群.(因为只能发群通知) 2. 添加机器人,得到一个url: 3. 开始写Python脚本: # -*- coding: utf-8 -*- ""&q ...

  2. 2018-11-1 NOIP 模拟赛解题报告

    T1 Domino 多米诺骨牌 题目大意 给你N个骨牌,上下各有一个数,要使上面一排的和为偶数,同时下面一排的和也为偶数,最多要翻转多少次?如果无法达成那么输出-1. 解法 水题秒切 根据数的奇偶性质 ...

  3. 2019寒假练题计划——LibreOJ刷题计划 &《信息学奥赛一本通》提高版题目

    目录 2019.1.27 #10082. 「一本通 3.3 例 1」Word Rings 题意 思路 #10083. 「一本通 3.3 例 2」双调路径 题意 思路 #10084. 「一本通 3.3 ...

  4. Android Studio 入门级教程(一)

    声明 AS已经是Android开发的主流工具了,但是学校教学用的还是eclipse,很多同学不知道如何入门.网上看到一位大神整理得很好的教程,转载过来,希望可以帮到有需要的人. 生命壹号:http:/ ...

  5. 优雅的vue.js

    优雅的vue.js代码 https://www.cnblogs.com/zhengrunlin/p/9164951.html watch 与 computed 的巧妙结合 如上图,一个简单的列表页面. ...

  6. 【LOJ】#2078. 「JSOI2016」无界单词

    题解 用所有的方案减去有界的方案 我们规定两个前缀后缀相同时长度最短的,设长度为l,因为长度最短所以他们也是无界单词,可以递推 \(f[i] = \sum_{j = 1}^{\lfloor \frac ...

  7. 2017 icpc 沈阳 G - Infinite Fraction Path

    题目大意:有n个点, 每个点有一个数字0 - 9, 第 i 个点只能到 第(i * i + 1)个点,问你在哪个点出发走n次构成的数字串最大. 思路:利用求后缀数组的倍增比较思想, 许多细节需要注意. ...

  8. 关于我学XSS躺过的那些坑

    XSS字符编码 在学习编码绕过时由于数量多,类型相似,不太容易记得住,记得全,故做此记录. 0x01 Html标签属性中执行 简单了解: Html标签属性中的XSS问题多属于javascript伪协议 ...

  9. Redis 的线程模型

    redis 内部使用文件事件处理器 file event handler,这个文件事件处理器是单线程的,所以 redis 才叫做单线程的模型.它采用 IO 多路复用机制同时监听多个 socket,根据 ...

  10. OSNIT信息收集分析框架OSRFramework

     OSNIT信息收集分析框架OSRFramework OSNIT是一种从公开的信息资源搜集信息的有效方式.Kali Linux集成了一款专用分析工具集OSRFramework.该工具集包含多个常用工具 ...