C# HashSet 用法、Hashtable用法
HashSet 用法
.NET 3.5在System.Collections.Generic命名空间中包含一个新的集合类:HashSet<T>。这个集合类包含不重复项的无序列表。这种集合称为“集(set)”。集是一个保留字,所以该类有另一个名称HashSet<T>。这个名称很容易理解,因为这个集合基于散列值,插入元素的操作非常快,不需要像List<T>类那样重排集合。
HashSet<T>类提供的方法可以创建合集和交集。
创建HashSet:
HashSet<string> hs = new HashSet<string>();
HashSet<string> companyTeams = new HashSet<string>() { "Ferrari", "McLaren", "Toyota", "BMW", "Renault", "Honda" };
HashSet<T>改变集的值的方法:
Add(): 如果某元素不在集合中,Add()方法就把该元素添加到集合中。在其返回值Boolean中,返回元素是否添加的信息
eg:
if (!companyTeams.Add("McLaren"))
Console.WriteLine("McLaren was already in this set");
Clear():方法Clear()删除集合中的所有元素
eg: companyTeams.Clear();
Remove():Remove()方法删除指定的元素
eg: companyTeams.Remove("McLaren");
RemoveWhere(): RemoveWhere()方法需要一个Predicate<T>委托作为参数。删除满足谓词条件的所有元素
Predicate 可以委托给一个函数或者一个拉姆达表达式:
委托给拉姆达表达式:
eg:
companyTeams.RemoveWhere(company => { if (company.Length > 5) { return true; } else { return false; } });
委托给一个函数:
eg:
companyTeams.RemoveWhere(CheckLength);
public bool CheckLength(string company)
{
return company.Length > 5 ? true : false;
}
CopyTo(): CopyTo()把集合中的元素复制到一个数组中
eg:
string[] strArray = new string[companyTeams.Count];
companyTeams.CopyTo(strArray);
foreach (string str in strArray)
{
Console.WriteLine(str);
}
ExceptWith():ExceptWith()方法把一个集合作为参数,从集中删除该集合中的所有元素
eg:
companyTeams.ExceptWith(privateTeams);
foreach (var str in companyTeams)
{
Console.WriteLine(str);
}
UnionWith():UnionWith()方法把传送为参数的集合中的所有元素添加到集中
eg:
companyTeams.UnionWith(privateTeams);
foreach (var str in companyTeams)
{
Console.WriteLine(str);
}
HashSet<T>仅返回集的信息、不修改元素的方法。
Contains():如果所传送的元素在集合中,方法Contains()就返回true
eg:
if (companyTeams.Contains("BMW"))
{
Console.WriteLine("companyTeams contains \"BMW\"");
}
IsSubsetOf():如果参数传送的集合是集的一个子集,方法IsSubsetOf()就返回true
eg:
if (traditionalTeams.IsSubsetOf(companyTeams))
{
Console.WriteLine("traditionalTeams is " + "subset of companyTeams");
}
IsSupersetOf():如果参数传送的集合是集的一个超集,方法IsSupersetOf()就返回true
eg:
if (companyTeams.IsSupersetOf(traditionalTeams))
{
Console.WriteLine("companyTeams is a superset of " + "traditionalTeams");
}
Overlaps():如果参数传送的集合中至少有一个元素与集中的元素相同,Overlaps()就返回true
eg:
traditionalTeams.Add("Williams");
if (privateTeams.Overlaps(traditionalTeams))
{
Console.WriteLine("At least one team is " + "the same with the traditional " + "and privateteams");
}
SetEquals():如果参数传送的集合和集包含相同的元素,方法SetEquals()就返回true
http://www.cnblogs.com/xiaopin/archive/2011/01/08/1930540.html
Hashtable用法:
一、哈希表(Hashtable)简述
在.NET
Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似key/value的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。Hashtable中key/value键值对均为object类型,所以Hashtable可以支持任何类型的key/value键值对.
二、哈希表的简单操作
在哈希表中添加一个key/value键值对:HashtableObject.Add(key,value);
在哈希表中去除某个key/value键值对:HashtableObject.Remove(key);
从哈希表中移除所有元素: HashtableObject.Clear();
判断哈希表是否包含特定键key: HashtableObject.Contains(key);
-
Hashtable ht = new Hashtable(); //创建一个Hashtable实例
-
ht.Add("E", "e");//添加key/value键值对
-
ht.Add("A", "a");
-
ht.Add("C", "c");
-
ht.Add("B", "b");
-
string s = (string)ht["A"];
-
if (ht.Contains("E")) //判断哈希表是否包含特定键,其返回值为true或false
-
Console.WriteLine("the E key:exist");
-
ht.Remove("C");//移除一个key/value键值对
-
Console.WriteLine(ht["A"]);//此处输出a
-
ht.Clear();//移除所有元素
-
Console.WriteLine(ht["A"]); //此处将不会有任何输出
三、遍历哈希表
遍历哈希表需要用到DictionaryEntry Object,代码如下:
-
foreach (DictionaryEntry de in ht) //ht为一个Hashtable实例
-
{
-
Console.WriteLine(de.Key);//de.Key对应于key/value键值对key
-
Console.WriteLine(de.Value);//de.Key对应于key/value键值对value
-
}
四、对哈希表进行排序
对哈希表进行排序在这里的定义是对key/value键值对中的key按一定规则重新排列,但是实际上这个定义是不能实现的,因为我们无法直接在Hashtable进行对key进行重新排列,如果需要Hashtable提供某种规则的输出,可以采用一种变通的做法:
-
ArrayList akeys = new ArrayList(ht.Keys); //别忘了导入System.Collections
-
akeys.Sort(); //按字母顺序进行排序
-
foreach (string skey in akeys)
-
{
-
Console.Write(skey + ":");
-
Console.WriteLine(ht[skey]);//排序后输出
-
}
http://www.cnblogs.com/feisky/archive/2009/10/29/1591956.html