2012-10-05

[C#] HashSet<T>–IsSubsetOf , Overlaps , IntersectWith

 

這是一個很好用的東西,在Silverlight 以及.net framework  3.5 以上版本就有了..

我們來看看他解決甚麼問題…

假設有兩團東西..

Array1= [A,B,C];

Array2= [B,A];

這時候我們要比對是否這兩個陣列是否有重複的東西..這時候你可能解決方法就是跑兩個迴圈..

才可以找出重複的東西..

如果你是要找出兩者的聯集部分..你可以直接這樣寫…

HashSet<string> strs = new HashSet<string>();

strs.Add("A");
strs.Add("B");
strs.Add("C");
strs.Add("B");
strs.Add("A");

foreach (var str in strs)
{
Response.Write(str);
}

這樣輸出結果 ABC



IsSubsetOf
- 判斷 HashSet<T> 物件是否為指定之集合的子集。


直接來看例子馬上就可以理解…



HashSet<string> strs1 = new HashSet<string>();
strs1.Add("A");
strs1.Add("B");
strs1.Add("C");
HashSet<string> strs2 = new HashSet<string>();
strs2.Add("A");
strs2.Add("B");
Response.Write(strs1.IsSubsetOf(strs2) +"<br />");
Response.Write(strs2.IsSubsetOf(strs1) + "<br />");

這樣輸出結果為


False
True


所以代表 strs1 不是 strs2 的子集合(因為多了一個C)


但是 strs2 是 strs1 的子集合..


Overlaps - 判斷目前的 HashSet<T> 物件與指定的集合是否共用通用的項目。


判斷是否有共用只有有一個被包含到就會回傳 true



HashSet<string> strs1 = new HashSet<string>();
strs1.Add("A");
strs1.Add("B");
strs1.Add("C");
 
 
HashSet<string> strs2 = new HashSet<string>();
strs2.Add("A");
strs2.Add("B");
 
 
HashSet<string> strs3 = new HashSet<string>();
strs3.Add("A");
strs3.Add("F");
 
HashSet<string> strs4 = new HashSet<string>();
strs4.Add("D");
strs4.Add("E");
 
Response.Write(strs2.Overlaps(strs1) + "<br />");
Response.Write(strs3.Overlaps(strs1) + "<br />");
Response.Write(strs4.Overlaps(strs1) + "<br />");

輸出結果:


True
True
False


因為 strr4 並沒有一個項目跟strs1 有交集 所以回傳false 其他的都至少有一個交集..


IntersectWith - 修改目前的 HashSet<T> 物件,以便僅包含該物件和指定之集合中同時出現的項目。


這很方便,可以找出兩個集合中交集的部分..



HashSet<string> strs1 = new HashSet<string>();
strs1.Add("A");
strs1.Add("B");
strs1.Add("C");
strs1.Add("X");
strs1.Add("Y");
strs1.Add("Z");
 
 
HashSet<string> strs2 = new HashSet<string>();
strs2.Add("A");
strs2.Add("E");
strs2.Add("F");
strs2.Add("G");
strs2.Add("B");
 
strs1.IntersectWith(strs2);
 
foreach (var str in strs1)
{
    Response.Write(str);
}

結果:


AB


上面提到幾個,是這一陣子比較常用的部分,基本上很方便,做一下筆記免得自己忘記..


蹂躪哥這篇文章 [C#]HashSet 集合型別  也有講述到,可以參考..