SortedSet<T> มี property Min และ Max คืนค่าต่ำสุดและสูงสุดตามลำดับการเรียง ทำงานใน O(1) เพราะข้อมูลเรียงลำดับอยู่แล้ว (Red-Back Tree)
ตัวอย่างโค้ดที่ 1: สตริง พร้อม Min/Max
using System;
using System.Collections.Generic;
public class Demo
{
public static void Main()
{
SortedSet set1 = new SortedSet();
set1.Add("AB");
set1.Add("BC");
set1.Add("CD");
set1.Add("EF");
Console.WriteLine("Elements in SortedSet1...");
foreach (string res in set1)
{
Console.WriteLine(res);
}
Console.WriteLine("Maximum element in SortedSet1 = " + set1.Max);
Console.WriteLine("Minimum element in SortedSet1 = " + set1.Min);
SortedSet set2 = new SortedSet();
set2.Add("BC");
set2.Add("CD");
set2.Add("DE");
set2.Add("EF");
set2.Add("AB");
set2.Add("HI");
set2.Add("JK");
Console.WriteLine("Elements in SortedSet2 (Enumerator for SortedSet)...");
SortedSet.Enumerator demoEnum = set2.GetEnumerator();
while (demoEnum.MoveNext())
{
string res = demoEnum.Current;
Console.WriteLine(res);
}
Console.WriteLine("Maximum element in SortedSet2 = " + set2.Max);
Console.WriteLine("Minimum element in SortedSet2 = " + set2.Min);
}
}
ผลลัพธ์
Elements in SortedSet1...
AB
BC
CD
EF
Maximum element in SortedSet1 = EF
Minimum element in SortedSet1 = AB
Elements in SortedSet2 (Enumerator for SortedSet)...
AB
BC
CD
DE
EF
HI
JK
Maximum element in SortedSet2 = JK
Minimum element in SortedSet2 = AB
ตัวอย่างโค้ดที่ 2: จำนวนเต็ม
using System;
using System.Collections.Generic;
public class Demo
{
public static void Main()
{
SortedSet set1 = new SortedSet();
set1.Add(5);
set1.Add(50);
set1.Add(20);
set1.Add(10);
set1.Add(70);
set1.Add(60);
set1.Add(55);
set1.Add(95);
Console.WriteLine("Elements in SortedSet...");
foreach (int res in set1)
{
Console.WriteLine(res);
}
Console.WriteLine("Maximum element in SortedSet = " + set1.Max);
Console.WriteLine("Minimum element in SortedSet = " + set1.Min);
}
}
ผลลัพธ์
Elements in SortedSet...
5
10
20
50
55
60
70
95
Maximum element in SortedSet = 95
Minimum element in SortedSet = 5
ข้อสังเกตสำคัญ
Min และ Max ใช้ได้ก็ต่อเมื่อ Count > 0 - หากว่างจะโยน InvalidOperationException
- ลำดับการเรียงใช้
IComparer<T> (default ใช้ Comparer<T>.Default)
- สำหรับ string เรียงตาม ordinal (lexicographic) - "AB" < "BC" < "CD"...
- O(1) เพราะ tree เก็บ pointer ไป node ซ้ายสุด/ขวาสุด
เมธอดเกี่ยวกับ Range Queries
| Method | คำอธิบาย |
GetViewBetween(lower, upper) | ดู subset ในช่วง [lower, upper] |
GetViewBetween(lower, upper).Min | ค่าต่ำสุดในช่วง |
GetViewBetween(lower, upper).Max | ค่าสูงสุดในช่วง |
SortedSet vs HashSet vs List - Min/Max
| Collection | Min/Max | Complexity |
| SortedSet<T> | มี Min/Max property | O(1) |
| HashSet<T> | ไม่มี built-in | O(n) ต้องวนลูป |
| List<T> | ไม่มี built-in | O(n) ต้องวนลูป |
| Array | ไม่มี built-in | O(n) หรือ O(1) หากเรียงแล้ว |
เมื่อไหร่ควรใช้ SortedSet
- ต้องการ Min/Max บ่อย
- ต้องการข้อมูล unique และเรียงลำดับตลอด
- ต้องการ Range queries (GetViewBetween)
- ต้องการ Set operations (Union, Intersect, Except)