热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#HashSet用法[转]

原文链接.NET3.5在System.Collections.Generic命名空间中包含一个新的集合类:HashSet。这个集合类包含不重复项的无序列表。这种

原文链接

.NET 3.5在System.Collections.Generic命名空间中包含一个新的集合类:HashSet。这个集合类包含不重复项的无序列表。这种集合称为“集(set)”。集是一个保留字,所以该类有另一个名称HashSet。这个名称很容易理解,因为这个集合基于散列值,插入元素的操作非常快,不需要像List类那样重排集合。

HashSet类提供的方法可以创建合集和交集。表10-12列出了改变集的值的方法。

表  10-12

HashSet的修改方法          说    明
 
Add()                   如果某元素不在集合中,Add()方法就把该元素添加到集合中。在其返回值Boolean中,返回元素是否添加的信息
 
Clear()                  方法Clear()删除集合中的所有元素
 
Remove()                  Remove()方法删除指定的元素
 
RemoveWhere()              RemoveWhere()方法需要一个Predicate委托作为参数。删除满足谓词条件的所有元素
 
CopyTo()                      CopyTo()把集合中的元素复制到一个数组中
 
ExceptWith()                 ExceptWith()方法把一个集合作为参数,从集中删除该集合中的所有元素
 
IntersectWith()                IntersectWith()修改了集,仅包含所传送的集合和集中都有的元素
 
UnionWith()                   UnionWith()方法把传送为参数的集合中的所有元素添加到集中
 


表10-13列出了仅返回集的信息、不修改元素的方法。

表  10-13

HashSet的验证方法           说    明
 
Contains()                 如果所传送的元素在集合中,方法Contains()就返回true
 
IsSubsetOf()                 如果参数传送的集合是集的一个子集,方法IsSubsetOf()就返回true
 
IsSupersetOf()              如果参数传送的集合是集的一个超集,方法IsSupersetOf()就返回true
 
Overlaps()                 如果参数传送的集合中至少有一个元素与集中的元素相同,Overlaps()就返回true
 
SetEquals()                如果参数传送的集合和集包含相同的元素,方法SetEquals()就返回true
 


 

在示例代码中,创建了3个字符串类型的新集,并用一级方程式汽车填充。HashSet类实现了ICollection接口。但是在该类中,Add()方法是显式实现的,还提供了另一个Add()方法。Add()方法的区别是返回类型,它返回一个布尔值,说明是否添加了元素。如果该元素已经在集中,就不添加它,并返回false。

 

HashSet < string > companyTeams &#61;new HashSet < string > (){ "Ferrari", "McLaren", "Toyota", "BMW","Renault", "Honda" };

HashSet < string > traditionalTeams &#61;new HashSet < string > (){ "Ferrari", "McLaren" };

HashSet < string > privateTeams &#61;new HashSet < string > (){ "Red Bull", "Toro Rosso", "Spyker","Super Aguri" };

if (privateTeams.Add("Williams"))
    Console.WriteLine("Williams added");
if (!companyTeams.Add("McLaren"))
    Console.WriteLine("McLaren was already in this set");

 

 

两个Add()方法的输出写到控制台上&#xff1a;

Williams added

McLaren was already in this set

 

方法IsSubsetOf()和IsSupersetOf()比较集和实现了IEnumerable接口的集合&#xff0c;返回一个布尔结果。这里&#xff0c;IsSubsetOf()验证traditionalTeams中的每个元素是否都包含在companyTeams中&#xff0c;IsSupersetOf()验证traditionalTeams是否没有与companyTeams比较的额外元素。

 

if (traditionalTeams.IsSubsetOf(companyTeams))
{
  Console.WriteLine("traditionalTeams is " &#43;"subset of companyTeams");
}

if (companyTeams.IsSupersetOf(traditionalTeams))
{
  Console.WriteLine("companyTeams is a superset of " &#43;"traditionalTeams");
}

 

 

这个验证的结果如下&#xff1a;

traditionalTeams is a subset of companyTeams

companyTeams is a superset of traditionalTeams

 

Williams也是一个传统队&#xff0c;因此这个队添加到traditionalTeams集合中&#xff1a;

 

traditionalTeams.Add("Williams");
if (privateTeams.Overlaps(traditionalTeams))
{
    Console.WriteLine("At least one team is " &#43;"the same with the traditional " &#43;"and privateteams");
}

 

 

这有一个重叠&#xff0c;所以结果如下&#xff1a;

At least one team is the same with the traditional and private teams.

 

调用UnionWith()方法&#xff0c;给变量allTeams填充了companyTeams、PrivateTeams和traditionalTeams的合集&#xff1a;

 

HashSet < string > allTeams &#61;new HashSet < string > (companyTeams);
allTeams.UnionWith(privateTeams);
allTeams.UnionWith(traditionalTeams);
Console.WriteLine();
Console.WriteLine("all teams");
foreach (var team in allTeams)
{
   Console.WriteLine(team);
}

 

 

这里返回所有的队&#xff0c;但每个队都只列出一次&#xff0c;因为集只包含唯一值&#xff1a;

Ferrari

McLaren

Toyota

BMW

Renault

Honda

Red Bull

Toro Rosso

Spyker

Super Aguri

Williams

 

方法ExceptWith()从allTeams集中删除所有的私人队&#xff1a;

 

allTeams.ExceptWith(privateTeams);
Console.WriteLine();
Console.WriteLine("no private team left");
foreach (var team in allTeams)
{
    Console.WriteLine(team);
}

 

 

集合中的其他元素不包含私人队&#xff1a;

Ferrari

McLaren

Toyota

BMW

Renault

Honda

转:https://www.cnblogs.com/flyant/p/4516424.html



推荐阅读
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Whatsthedifferencebetweento_aandto_ary?to_a和to_ary有什么区别? ... [详细]
  • 本文介绍了一种在PHP中对二维数组根据某个字段进行排序的方法,以年龄字段为例,按照倒序的方式进行排序,并给出了具体的代码实现。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 集合的遍历方式及其局限性
    本文介绍了Java中集合的遍历方式,重点介绍了for-each语句的用法和优势。同时指出了for-each语句无法引用数组或集合的索引的局限性。通过示例代码展示了for-each语句的使用方法,并提供了改写为for语句版本的方法。 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • Ihaveaworkfolderdirectory.我有一个工作文件夹目录。holderDir.glob(*)>holder[ProjectOne, ... [详细]
  • 如何使用Python从工程图图像中提取底部的方法?
    本文介绍了使用Python从工程图图像中提取底部的方法。首先将输入图片转换为灰度图像,并进行高斯模糊和阈值处理。然后通过填充潜在的轮廓以及使用轮廓逼近和矩形核进行过滤,去除非矩形轮廓。最后通过查找轮廓并使用轮廓近似、宽高比和轮廓区域进行过滤,隔离所需的底部轮廓,并使用Numpy切片提取底部模板部分。 ... [详细]
  • PHP引用的概念和用法详解
    本文详细介绍了PHP中引用的概念和用法。引用是指不同的变量名访问同一个变量内容,类似于Unix文件系统中的hardlink。文章从引用的定义、作用、语法和注意事项等方面进行了解释和示例。同时还介绍了对未定义变量使用引用的情况,以及在函数和new运算符中使用引用的注意事项。 ... [详细]
  • Apache Shiro 身份验证绕过漏洞 (CVE202011989) 详细解析及防范措施
    本文详细解析了Apache Shiro 身份验证绕过漏洞 (CVE202011989) 的原理和影响,并提供了相应的防范措施。Apache Shiro 是一个强大且易用的Java安全框架,常用于执行身份验证、授权、密码和会话管理。在Apache Shiro 1.5.3之前的版本中,与Spring控制器一起使用时,存在特制请求可能导致身份验证绕过的漏洞。本文还介绍了该漏洞的具体细节,并给出了防范该漏洞的建议措施。 ... [详细]
  • Jboss的EJB部署描述符standardjaws.xml配置步骤详解
    本文详细介绍了Jboss的EJB部署描述符standardjaws.xml的配置步骤,包括映射CMP实体EJB、数据源连接池的获取以及数据库配置等内容。 ... [详细]
author-avatar
于昕会_445
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有