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