首页 > 编程笔记 > C#笔记 阅读:11

C# SortedSet集合的用法(附带实例)

C# 中的 SortedSet 是一个保持排序、数据不重复出现的集合。

C# SortedSet对象的创建

如果只是创建 SortedSet 对象,则可以使用下列语法:
SortedSet<T> 对象名称 = new SortedSet<T>();

如果要创建 SortedSet 对象,同时还要设定此对象的容量,则可以增加 Int32 参数,详情可以参考下列语法:
SortedSet<T> 对象名称 = new SortedSet<T>(Int32);

如果要创建对象,同时设置初始值,则可以使用下列语法:
SortedSet<int> 对象名称 = new SortedSet<int> { 系列初始值 }

【实例】创建整数和字符串的 SortedSet 对象,然后输出,因为数据不重复,所以第 2 行有 2 个 7,最后输出只有 1 个 7。第 6 行有 2 个“C#”,最后输出只有 1 个“C#”。
SortedSet<int> sc = new SortedSet<int> { 8, 7, 9, 7, 5 };
foreach (var s in sc)
    Console.Write($"{s} ");
Console.WriteLine();
SortedSet<string> book = new SortedSet<string> { "Python", "C#", "C#" };
foreach (var b in book)
    Console.Write($"{b} ");
执行结果为:

5 7 8 9
C#  Python


如果要创建 SortedSet 对象,同时将指定项目复制至此对象,则可以使用下列语法:
SortedSet<T> 对象名称 = new SortedSet<T>(IEnumerable<T>);
SortedSet<T> 对象名称 = new SortedSet<T>(IComparer<T>);
注意,上述 IComparer 是源自 System.Collections 命名空间间的接口,这个接口的定义是可以使用 Compare(T obj1, T obj2) 作比较。所以在此 IComparer<T> 是指可以比较的数据类型,均可以作为指定项目复制到 SortedSet 对象名称内。

【实例】创建 SortedSet 对象,同时将可以列举的数据复制至此对象中,此例中可以列举的数据是指 program 字符串数组。注意,其实字符串也是可以比较的数据类型。
string[] program = { "Java", "Python", "C#" };

SortedSet<string> programs = new SortedSet<string>(program);
foreach (string p in programs)
{
    Console.WriteLine(p);
}
执行结果为:

C#
Java
Python

C# SortedSet的属性

SortedSet 的常用属性如下:
【实例】认识 Count、Max 和 Min 属性。
int[] number = { 9, 7, 3, 7, 9, 3 };

SortedSet<int> num = new SortedSet<int>(number);
Console.WriteLine($"元素数量:{num.Count}");
Console.WriteLine($"元素最大值:{num.Max}");
Console.WriteLine($"元素最小值:{num.Min}");
执行结果为:

元素数量: 3
元素最大值: 9
元素最小值: 3

C# SortedSet的方法

下表罗列了 SortedSet 的常用方法:

方法 描述
SortedSet<T>.Add(T) 将元素加入,同时回传是否加入成功。
SortedSet<T>.Contains(T) 回传元素是否存在。
SortedSet<T>.IntersectWith(IEnumerable<T>) 与另一个 SortedSet 对象作交集。
SortedSet<T>.UnionWith(IEnumerable<T>) 与另一个 SortedSet 对象作并集。
SortedSet<T>.Remove(T) 删除指定元素。
SortedSet<T>.Clear() 清除所有元素。
SortedSet<T>.IsSubsetOf(IEnumerable<T>) 是否指定 SortedSet 对象的子集合。
SortedSet<T>.IsSupersetOf(IEnumerable<T>) 是否指定 SortedSet 对象的父集合。
SortedSet<T>.Reverse() 元素反向排列。

【实例】以问答方式创建 SortedSet 对象。
int n;
string yesno = "Y";
SortedSet<int> num = new SortedSet<int>();
Console.WriteLine("创建 SortedSet");
while (yesno == "Y" || yesno == "y")
{
    Console.Write("请输入数字:");
    n = Convert.ToInt32(Console.ReadLine());
    if (num.Add(n))
        Console.WriteLine($"加入数字:{n} 成功");
    Console.Write("是否继续 ?(y/n)");
    yesno = Console.ReadLine();
}
Console.WriteLine("你所创建的 SortedSet 如下:");
foreach (var x in num)
    Console.Write(x + " ");
执行结果为:

创建 SortedSet
请输入数字:5
加入数字:5 成功
是否继续 ?(y/n)y
请输入数字:9
加入数字:9 成功
是否继续 ?(y/n)y
请输入数字:3
加入数字:3 成功
是否继续 ?(y/n)n
你所创建的 SortedSet 如下:
3 5 9

相关文章