Giới thiệu
SortedSet<T> là tập hợp (set) tự động sắp xếp và không trùng lặp. Implement IEnumerable<T>, cung cấp GetEnumerator() trả về SortedSet<T>.Enumerator (struct) để duyệt theo thứ tự tăng dần.
Ví dụ 1: Duyệt SortedSet với foreach và Enumerator thủ công
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("Set1 (foreach):");
foreach (string s in set1)
{
Console.WriteLine(s);
}
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("\nSet2 (Enumerator thủ công):");
SortedSet.Enumerator enumr = set2.GetEnumerator();
while (enumr.MoveNext())
{
Console.WriteLine(enumr.Current);
}
}
}
Kết quả
Set1 (foreach):
AB
BC
CD
EF
Set2 (Enumerator thủ công):
AB
BC
CD
DE
EF
HI
JK
Ví dụ 2: SortedSet với Enumerator
using System;
using System.Collections.Generic;
public class Demo
{
public static void Main()
{
SortedSet set = new SortedSet();
set.Add(100);
set.Add(200);
set.Add(300);
set.Add(400);
set.Add(500);
set.Add(600);
set.Add(700);
Console.WriteLine("SortedSet (Enumerator):");
SortedSet.Enumerator enumr = set.GetEnumerator();
while (enumr.MoveNext())
{
Console.WriteLine(enumr.Current);
}
}
}
Kết quả
SortedSet (Enumerator):
100
200
300
400
500
600
700
Đặc điểm Enumerator của SortedSet
- Là **struct** (value type) -> tránh allocation heap khi dùng foreach.
- Chỉ đọc (read-only), không hỗ trợ
Remove. - Duyệt theo thứ tự **tăng dần** (theo
IComparer<T>hoặc mặc định). - Phiên bản .NET Core/.NET 5+ tối ưu hơn .NET Framework.
Lưu ý khi dùng
- Không sửa đổi SortedSet trong khi đang enumerate (InvalidOperationException).
- Nếu cần xóa khi duyệt, hãy dùng
forlùi hoặc tập hợp các item cần xóa rồi xóa sau. SortedSetkhông cho phép trùng lặp,Addtrả vềfalsenếu đã tồn tại.
So sánh với HashSet
| Đặc điểm | HashSet<T> | SortedSet<T> |
|---|---|---|
| Thứ tự | Không đảm bảo | Tăng dần (sorted) |
| Phức tạp Add/Contains | O(1) trung bình | O(log n) |
| Bộ nhớ | Thấp hơn | Cao hơn (cây nhị phân) |
| Enumerator | Struct | Struct |