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

  1. Hashtable ht = new Hashtable(); //創建一個Hashtable實例
  2. ht.Add( "E", "e");//添加key/value鍵值對
  3. ht.Add( "A", "a");
  4. ht.Add( "C", "c");
  5. ht.Add( "B", "b");
  6. string s = (string)ht["A"];
  7. if (ht.Contains("E")) //判斷哈希表是否包含特定鍵,其返回值為true或false
  8. Console.WriteLine( "the E key:exist");
  9. ht.Remove( "C");//移除一個key/value鍵值對
  10. Console.WriteLine(ht[ "A"]);//此處輸出a
  11. ht.Clear(); //移除所有元素
  12. Console.WriteLine(ht[ "A"]); //此處將不會有任何輸出


三、遍歷哈希表
遍歷哈希表需要用到DictionaryEntry Object,代碼如下:

  1. foreach (DictionaryEntry de in ht) //ht為一個Hashtable實例
  2. {
  3. Console.WriteLine(de.Key); //de.Key對應於key/value鍵值對key
  4. Console.WriteLine(de.Value); //de.Key對應於key/value鍵值對value
  5. }


四、對哈希表進行排序
     對哈希表進行排序在這里的定義是對key/value鍵值對中的key按一定規則重新排列,但是實際上這個定義是不能實現的,因為我們無法直接在Hashtable進行對key進行重新排列,如果需要Hashtable提供某種規則的輸出,可以采用一種變通的做法:

  1. ArrayList akeys = new ArrayList(ht.Keys); //別忘了導入System.Collections
  2. akeys.Sort(); //按字母順序進行排序
  3. foreach (string skey in akeys)
  4. {
  5. Console.Write(skey + ":");
  6. Console.WriteLine(ht[skey]); //排序后輸出
  7. }


http://www.cnblogs.com/feisky/archive/2009/10/29/1591956.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM