以下我们来看 .NET 里 HashSet 的一些示例:
示例一 - 测试查找的功能:
Response.Write(set.Contains('我')); //True
Response.Write(set.Contains('你')); //False
上述示例中,我们能够将字符串,甚至中文字,传入 HashSet
示例二 - 测试 HashSet 内置的一些好用方法:
SymmetricExceptWith: 仅包含该对象或指定集合中存在的元素(但不可同时包含两者中的元素)。
UnionWith: 包含该对象本身和指定集合中存在的所有元素。
ExceptWith: 从当前 HashSet
IntersectWith: 仅包含该对象和指定集合中存在的元素。
using System.Collections.Generic;
class HashSetDemo
{
static void Main()
{
HashSet setA = new HashSet();
HashSet setB = new HashSet();
setA.Add('A');
setA.Add('B');
setA.Add('C');
setB.Add('C');
setB.Add('D');
setB.Add('E');
Show("Initial content of setA: ", setA);
Show("Initial content of setB: ", setB);
setA.SymmetricExceptWith(setB); //把 setA、setB 各自特有、对方没有的元素列出来
Show("setA after Symmetric difference with SetB: ", setA);
setA.UnionWith(setB); //把 setA、setB 的全部元素列出来 (union 并集)
Show("setA after union with setB: ", setA);
setA.ExceptWith(setB); //把 setA 中,所拥有的 setB 元素移除
Show("setA after subtracting setB: ", setA);
setA.IntersectWith(setB); //把 setA 中,所拥有的 setB 元素列出
Show("setA after intersect with setB: ", setA);
Console.WriteLine();
Console.Read();
}
static void Show(string msg, HashSet set)
{
Console.Write(msg);
foreach (char ch in set)
Console.Write(ch + " ");
Console.WriteLine();
}
}
执行结果:

图 3
由于 HastSet
此外,LINQ 也有类似上述示例的 Intersect、Except、Union、Distinct 的 set 运算功能,有兴趣比较两者特性的网友,可参考 msdn 或网络上的文章 [5]。主要的差别在于,LINQ set 运算始终返回新的 IEnumerable
------------------------------------------------------------------------
到了 .NET 4 才新建的 SortedSet 类,除了有前述 HashSet 类所拥有的 SymmetricExceptWith、UnionWith、ExceptWith、IntersectWith 等好用的方法外,还有「GetViewBetween (制定范围)」、「Max (取最大值)」、「Min (取最小值)」等新增的好用方法。
以下我们来看 SortedSet 这三个方法的示例:
示例三 - 测试 GetViewBetween、Max、Min 方法:
using System.Collections.Generic;
using System.Linq; //此为 Max()、Min() 方法的必要引用
var set = new SortedSet() { 5, 9, 2, 1, 2, 2, 3, 7, 4, 9, 9 };
foreach (int element in set)
Response.Write(string.Format(" {0}", element));
Response.Write("
");
Response.Write("Max: " + set.Max() + "
");
Response.Write("Min: " + set.Min() + "
");
Response.Write("
取 2 ~ 5 之间的值:
");
//只取值为 2 ~ 5 之间的元素
var subSet = set.GetViewBetween(2, 5);
foreach (int i in subSet)
{
Response.Write(i + ",");
}
执行结果:

图 4
此 GetViewBetween() 方法,也适用于 SortedSort 里元素为字符串、字符的处理