ReversibleSortedList<TKey, TValue> 繼承 SortedList<TKey, TValue> 所有功能,並新增「一鍵反轉排序方向」能力。本文透過完整範例展示其核心用法:建立、插入、預設升序、動態切換降序、新增元素後維持順序、再切回升序。
var rsl = new ReversibleSortedList<int, string>();
rsl.Add(2, "2");
rsl.Add(5, "5");
rsl.Add(3, "3");
rsl.Add(1, "1");
插入順序為 2, 5, 3, 1,但內部自動按鍵升序排列。
foreach (var kvp in rsl)
Debug.WriteLine($"\t{kvp.Key}\t{kvp.Value}");
輸出:
1 1 2 2 3 3 5 5
rsl.Comparer.SortDirection = ListSortDirection.Descending;
rsl.Sort();
foreach (var kvp in rsl)
Debug.WriteLine($"\t{kvp.Key}\t{kvp.Value}");
輸出:
5 5 3 3 2 2 1 1
rsl.Add(4, "4");
foreach (var kvp in rsl)
Debug.WriteLine($"\t{kvp.Key}\t{kvp.Value}");
輸出(新元素自動插入正確降序位置):
5 5 4 4 3 3 2 2 1 1
rsl.Comparer.SortDirection = ListSortDirection.Ascending;
rsl.Sort();
foreach (var kvp in rsl)
Debug.WriteLine($"\t{kvp.Key}\t{kvp.Value}");
輸出:
1 1 2 2 3 3 4 4 5 5
| 階段 | 排序方向 | 輸出序列 |
|---|---|---|
| 初始插入 | Ascending (預設) | 1, 2, 3, 5 |
| 切換降序 | Descending | 5, 3, 2, 1 |
| 降序新增 4 | Descending | 5, 4, 3, 2, 1 |
| 切回升序 | Ascending | 1, 2, 3, 4, 5 |
| 操作 | 程式碼 | 說明 |
|---|---|---|
| 設定方向 | rsl.Comparer.SortDirection = ListSortDirection.Descending; | 僅修改比較器旗標,不改變資料順序 |
| 套用排序 | rsl.Sort(); | 就地反轉陣列,同步 _currentSortDirection |
| 新增元素 | rsl.Add(key, value); | 按當前排序方向插入正確位置 |
| 列舉 | foreach (var kvp in rsl) | 依當前資料順序產出 KeyValuePair |
Sort() → 重新繫結,體驗流暢。Add 所有資料,最後一次 Sort(),優於逐筆插入排序。ReversibleSortedList 以極簡 API(Comparer.SortDirection + Sort())實現了動態排序反轉,適用於任何需支援「雙向排序切換」的業務場景。範例證明其行為直觀、效能優異(O(n) 反轉),是替代手動維護兩份清單或重複排序的最佳選擇。