1. 程式人生 > >C# HashSet集合型別使用介紹

C# HashSet集合型別使用介紹

1.HashSet集合

HashSet是以數學Set集合為基礎的,使用HashSet可以提高集合的運算。使用HashSet集合不自帶排序方法,如果需要排序的需求可以參考使用List<T>集合配合Sort方法。

HashSet的優勢在與運算快,作為一種存放在記憶體的資料,可以很快的進行設定和取值的操作。HashSet無法向裡面新增重複的資料,避免新增HashSet<T>裡面的資料重複。我們使用HashSet常常在集合相加集合相減這些集合與集合之間的操作之中。

使用HashSet作為記憶體儲存的快速資料庫,這個需要隨時跟新HashSet裡面的資料,因為在HashSet中一個長時間未被訪問的資料,將被系統自動回收掉,那麼就會導致失敗,那麼如何才能保證HashSet裡面的值是長存在的而且達到不斷的更新裡面的值呢?

首先程式過來訪問我們HashSet裡面有沒有需要的資料,如果有我們需要的資料就直接返回給使用者,不用呼叫查詢資料庫的操作。如果HashSet裡面沒有我們需要的資料,程式再去查詢一次資料庫是否有該Query資料,如果有返回給使用者同時把查詢的結果新增到HashSet裡面,這麼做可以一定程度的降低查詢資料庫所帶來的不便,但是不能根除,需要進一步提升效能,可以檢視前面的快取策略使用memcached來提高網站查詢和訪問。

1.1.我們要求兩個集合的並集

HashSet<int> numbers1;
HashSet<int> numbers2;
//分別進行numbers1和numbers2的值初始化或賦值
numbers1.UnionWith(numbers2);//求兩個集合的並集。

1.2.求兩個集合的交集
HashSet<int> numbers1;
HashSet<int> numbers2;
//分別進行numbers1和numbers2的值初始化或賦值
numbers1.IntersectWith(numbers2);//求兩個集合的交集。

1.3.求兩個集合的差集

HashSet<int> numbers1;
HashSet<int> numbers2;
//分別進行numbers1和numbers2的值初始化或賦值
numbers1.ExceptWith(numbers2);//求兩個集合的差集。

1.4.求兩個集合的對稱差集

HashSet<int> numbers1;
HashSet<int> numbers2;
//分別進行numbers1和numbers2的值初始化或賦值
numbers1.SymmetricExceptWith(numbers2);//求兩個集合的對稱差集。

2.HashSet常用擴充套件方法

2.1.Add,將專案新增到HashSet之中。

2.2.Clear,清空HashSet裡面的值。

2.3.Remove,從HashSet中移除值。

2.4Contains,判斷HashSet是否包含指定專案。

2.4Equals(Object),判斷是否相等。

3.HashSet與Linq操作

HashSet<T>與LINQ的對等的方法

UnionWith       ==>  Union

IntersectWith  ==>  Interset

ExceptWith     ==>  Except

不提供排序     ==>  Distinct

那麼我們已經有很多的集合型別如List<T> ,Dictionary<TKey,TValue>或Hashtable等這些集合型別,我們該如何選定我應該採用的哪一個集合型別呢?

“如果你必須建立新的設定,或則如果應用程式只需要存取提供的任務,那麼使用任何的IEnumerable<T>集合都已經足夠了。但是,如果應用程式需要存取其他值,或則不建議不需要建立新的集合,這時可使用HashSet<T>.”——摘自MSDN