這是一個很好用的東西,在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 集合型別 也有講述到,可以參考..