新增 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 原始碼將更輕鬆。