首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

ReversibleSortedList 實戰指南:動態反轉排序的完整範例與最佳實踐

     編輯:關於C語言

前言

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
切換降序Descending5, 3, 2, 1
降序新增 4Descending5, 4, 3, 2, 1
切回升序Ascending1, 2, 3, 4, 5

核心 API 速查

操作程式碼說明
設定方向rsl.Comparer.SortDirection = ListSortDirection.Descending;僅修改比較器旗標,不改變資料順序
套用排序rsl.Sort();就地反轉陣列,同步 _currentSortDirection
新增元素rsl.Add(key, value);按當前排序方向插入正確位置
列舉foreach (var kvp in rsl)依當前資料順序產出 KeyValuePair

最佳實踐建議

  1. 批次修改方向後統一呼叫 Sort():避免多次反轉陣列。
  2. 新增元素前確認當前方向:新元素會依當前方向插入,若方向與預期不符會導致順序錯誤。
  3. 搭配 UI 控制項:DataGridView 欄位標題點擊時,切換方向 → Sort() → 重新繫結,體驗流暢。
  4. 大量資料初始化:先 Add 所有資料,最後一次 Sort(),優於逐筆插入排序。

總結

ReversibleSortedList 以極簡 API(Comparer.SortDirection + Sort())實現了動態排序反轉,適用於任何需支援「雙向排序切換」的業務場景。範例證明其行為直觀、效能優異(O(n) 反轉),是替代手動維護兩份清單或重複排序的最佳選擇。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved