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

打造可逆向排序的泛型字典類 (九 完):排序方向切換、修剪容量與多建構子完善

     編輯:關於C語言

動態排序方向切換

新增 Comparer 屬性公開內部比較器,Sort() 方法依方向反轉陣列:


private ListSortDirection _currentSortDirection = ListSortDirection.Descending;
public SortDirectionComparer<TKey> Comparer => _sortDirectionComparer;

public void Sort()
{
    if (_currentSortDirection != _sortDirectionComparer.SortDirection)
    {
        Array.Reverse(keys, 0, _size);
        Array.Reverse(values, 0, _size);
        _currentSortDirection = _sortDirectionComparer.SortDirection;
    }
}

修剪多餘容量


public void TrimExcess()
{
    int threshold = (int)(keys.Length * 0.9);
    if (_size < threshold) Capacity = _size;
}

需補充 Capacity 的 set 存取子(呼叫 InternalSetCapacity)。

豐富建構子

  • ReversibleSortedList(SortDirectionComparer<TKey> comparer):指定排序方向。
  • ReversibleSortedList(int capacity):預先分配容量。
  • ReversibleSortedList(IDictionary<TKey,TValue> dict):從現有字典複製並排序。
  • ReversibleSortedList(IDictionary<TKey,TValue> dict, SortDirectionComparer<TKey> comparer):複製並指定方向。
  • ReversibleSortedList(int capacity, SortDirectionComparer<TKey> comparer):容量與方向雙指定。

最終測試:排序切換


var rs = new ReversibleSortedList<string, string>();
rs.Add("3","a"); rs.Add("1","b"); rs.Add("2","c"); rs.Add("6","d"); rs.Add("5","e"); rs.Add("4","f");
foreach (var d in rs) Console.WriteLine($"{d.Key} {d.Value}");
Console.WriteLine("重新排序");
rs.Comparer.SortDirection = ListSortDirection.Ascending;
rs.Sort();
foreach (var d in rs) Console.WriteLine($"{d.Key} {d.Value}");

輸出


1 b
2 c
3 a
4 f
5 e
6 d
重新排序
6 d
5 e
4 f
3 a
2 c
1 b

專案總計約 129 頁文檔,完成從雛形到可用元件的完整演進。閱讀 FCL 原始碼將更輕鬆。

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