了解C#中的HashSet与⽰例
在C#中引⼊HashSet
在.NET框架中,有⼏个类可⽤于执⾏这些操作。⼀些课程如下:
列表
字典
哈希集
队列
集合
在C#编程中,像ArrayList,List这样的集合,只需添加其中的值,⽽不检查任何重复。为了避免这种重复的数据存储,.NET提供集合名称集。这是⼀个具有不同项⽬的集合类型。
有两种类型的集合,SortedSet和HastSet。SortedSet按照排序顺序存储数据,也可以消除重复。
哈希集 vs SortedSet
这两个类都存储⾮重复的项⽬。但是,如果要执⾏性能,并且不关⼼项⽬是否未分类存储,则进⼊HashSet。但是,如果您希望项⽬在插⼊后进⾏排序,但可以进⾏性能打击,请选择“排序”。
本⽂分为六个部分,分别如下:
第1节:HastSet的特点
第2节:消除HashSet中的重复数据条⽬
第3节:使⽤UnionWith()⽅法修改HashSet⽅法
第4节:使⽤ExceptWith()⽅法
修改Hashset第5节:使⽤SymmetricExceptWith()⽅法修改Hashset
第6节:检查添加,删除等操作的性能,包含HashSet和List。
让我们开始吧
第1节:HastSet的特点
这是HashSet的⼀些突出特点。
这个类代表⼀组值。
这个类提供了⾼性能的操作。
这是⼀组不包含重复元素的集合,并且其中存储的元素没有特定的顺序。
在.NET Framework 4.6版本中,HashSet 实现IReadOnlyCollection 界⾯连同ISet 接⼝。
哈希集类对其中存储的元素数量没有任何最⼤容量。随着元素数量的增加,这种容量不断增加。
第2节:消除C#HashSet中的重复
步骤1:打开Visual Studio并创建名称为CS_Using_HashSet的控制台应⽤程序。
步骤2:在Program.cs的Main()⽅法中,添加以下代码
using System;
writeline特点
using System.Collections.Generic;
namespace CS_Using_HashSet
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Using HashSet");
Console.WriteLine("Using HashSet");
//1. Defining String Array (Note that the string "mahesh" is repeated)
string[] names = new string[] {
"mahesh",
"vikram",
"mahesh",
"mayur",
"suprotim",
"saket",
"manish"
};
//2. Length of Array and Printing array
Console.WriteLine("Length of Array "+ names.Length);
Console.WriteLine();
Console.WriteLine("The Data in Array");
foreach(var n in names)
{
Console.WriteLine(n);
}
Console.WriteLine();
//3. Defining HashSet by passing an Array of string to it
HashSet< string> hSet = new HashSet< string>(names);
//4. Count of Elements in HashSet
Console.WriteLine("Count of Data in HashSet "+ hSet.Count);
Console.WriteLine();
//5. Printing Data in HashSet, this will eliminate duplication of "mahesh"
Console.WriteLine("Data in HashSet");
foreach(var n in hSet)
{
Console.WriteLine(n);
}
Console.ReadLine();
}
}
}
上述代码具有以下规格(注:代码中的注释号与以下编号相符)
1.声明⼀个名称名称的字符串数组,它在其中存储名称。该数组具有字符串“mahesh”的重复条⽬。
2.打印其中的数组长度和数据。
3.定义⼀个类型为字符串的HashSet 。该对象使⽤数组进⾏初始化,该数组⾃动从数组中添加HashSet中的项。
4.如第1节所述,HashSet对象不允许重复输⼊,因此结果将显⽰HashSet中存在的数据的计数⼩于数组计数。
5.在HashSet中显⽰数据。
运⾏应⽤程序,并显⽰以下结果:
哈希集 - 重复消除
第3节:使⽤UnionWith()⽅法修改HashSet
UnionWith()⽅法⽤于修改HashSet,以包含其中存在的所有元素以及与其建⽴联合的其他(IEnumerable)集合中的元素。以下代码是UnionWith()上的实现。
步骤1:在项⽬的Main()⽅法中添加以下代码。
string[] names1 = new string[] {
"mahesh","sabnis","manish","sharma","saket","karnik"
};
string[] Names2 = new string[] {
"suprotim","agarwal","vikram","pendse","mahesh","mitkari"
};
//2.
HashSet< string> hSetN1 = new HashSet< string>(Names1);
Console.WriteLine("Data in First HashSet");
foreach(var n in hSetN1)
{
Console.WriteLine(n);
}
Console.WriteLine("_______________________________________________________________");
HashSet< string> hSetN2 = new HashSet< string>(names2);
Console.WriteLine("Data in Second HashSet");
foreach(var n in hSetN2)
{
Console.WriteLine(n);
}
Console.WriteLine("________________________________________________________________");
//3.
Console.WriteLine("Data After Union");
hSetN1.UnionWith(hSetN2);
foreach(var n in hSetN1)
{
Console.WriteLine(n);
}
以上代码具有以下规格(注:以下编号与注释相符)。
数组对象声明Name1和Names2,其中包含字符串数据。
2.本步骤定义了两个HashSet的对象hSetN1和hSetN2基于names1和names2分别和来⾃两个HashSet的数据被打印。此步骤在hSetN1上调⽤UnionWith()⽅法,并将hSetN2 对象传递给它,并在union之后显⽰hSetN1中的所有数据。运⾏应⽤程序,将显⽰以下结果:
第4节:使⽤ExceptWith()⽅法修改哈希集
该⽅法⽤于通过删除与其他集合中的元素匹配的所有元素来修改HashSet。
步骤1:在Main()⽅法中添加以下代码。代码使⽤第3节中声明的hSetN2,并使⽤names1数组声明⼀个新的HashSet,该数组⽤于声明hSetN1。
Console.WriteLine();
Console.WriteLine("_________________________________");
Console.WriteLine("Data in HashSet before using Except With");
Console.WriteLine("_________________________________");
//storing data of hSetN3 in temporary HashSet
HashSet< string> hSetN3 = new HashSet< string>(names1);
foreach(var n in hSetN3)
{
Console.WriteLine(n);
}
Console.WriteLine();
Console.WriteLine("_________________________________");
Console.WriteLine("Using Except With");
Console.WriteLine("_________________________________");
hSetN3.ExceptWith(hSetN2);
foreach(var n in hSetN3)
{
Console.WriteLine(n);
}
运⾏应⽤程序后,将显⽰以下结果:
上述结果表明,当通过将hSetN2参数传递给hSetN2 HashSet的ExceptWith()⽅法时,从hSetN3中删除匹配的字符串“mahesh”,并显⽰剩余的字符串。
第5节:使⽤ SymmetricExceptWith()⽅法修改Hashset
此⽅法修改HashSet对象以包含仅存在于两个集合之⼀中的那些元素,但不能同时包含两个。
所有匹配的元素将被删除。
步骤1:在Main()⽅法中添加以下代码。代码useshSetN2在第3节中声明,并使⽤数组names1声明⼀个新的HashSet hSet4。HashSet< string> hSetN4 = new HashSet< string>(names1);
Console.WriteLine("_________________________________");
Console.WriteLine("Elements in HashSet before using SymmetricExceptWith");
Console.WriteLine("_________________________________");
Console.WriteLine("HashSet 1");
foreach(var n in hSetN4)
{
Console.WriteLine(n);
}
Console.WriteLine("HashSet 2");
foreach(var n in hSetN2)
{
Console.WriteLine(n);
}
Console.WriteLine("_________________________________");
Console.WriteLine("Using SymmetricExceptWith");
Console.WriteLine("_________________________________");
hSetN4.SymmetricExceptWith(hSetN2);
foreach(var n in hSetN4)
{
Console.WriteLine(n);
}
通过将hSetN2 HashSet传递给它,在HSetN4 HashSet上调⽤SymmetircExceptWith()⽅法。这两个HashSets都包含⼀个字符串名称“mahesh”。
通过消除匹配的条⽬,hSetN4将与hSetN2的值合并。运⾏应⽤程序后,结果如下:
第6节:检查HashSet vs List上的添加,删除,包含操作的性能。
以上所有部分都介绍了HashSet的各种⽅法。
但是,当开发⼈员想要根据性能选择最合适的集合类型作出决定时,重要的是要检查哪些操作经常在集合上执⾏。
通常,添加,删除,包含是对内存中集合执⾏的操作。要执⾏List和HashSet之间的添加,删除和包含操作的⽐较,使⽤以下字符串数组。(注:您可以使⽤任何其他数据)
static string[] names = new string[] {
"Tejas", "Mahesh", "Ramesh", "Ram", "GundaRam", "Sabnis", "Leena",
"Neema", "Sita", "Tejas", "Mahesh", "Ramesh", "Ram",
"GundaRam", "Sabnis", "Leena", "Neema", "Sita",
"Tejas", "Mahesh", "Ramesh", "Ram", "GundaRam",
"Sabnis", "Leena", "Neema", "Sita", "Tejas",
"Mahesh", "Ramesh", "Ram", "GundaRam", "Sabnis",

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。