C# SortedSet集合的用法(附带实例)
C# 中的 SortedSet 是一个保持排序、数据不重复出现的集合。
如果要创建 SortedSet 对象,同时还要设定此对象的容量,则可以增加 Int32 参数,详情可以参考下列语法:
如果要创建对象,同时设置初始值,则可以使用下列语法:
【实例】创建整数和字符串的 SortedSet 对象,然后输出,因为数据不重复,所以第 2 行有 2 个 7,最后输出只有 1 个 7。第 6 行有 2 个“C#”,最后输出只有 1 个“C#”。
如果要创建 SortedSet 对象,同时将指定项目复制至此对象,则可以使用下列语法:
【实例】创建 SortedSet 对象,同时将可以列举的数据复制至此对象中,此例中可以列举的数据是指 program 字符串数组。注意,其实字符串也是可以比较的数据类型。
【实例】认识 Count、Max 和 Min 属性。
【实例】以问答方式创建 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:获得 SortedSet 对象的元素个数;
- Max:元素的最大值;
- Min:元素的最小值。
【实例】认识 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