泛型排序构建可反转排序的泛型字典类(9完)--完善
- 格式:pdf
- 大小:119.79 KB
- 文档页数:5
泛型排序:构建可反转排序的泛型字典类(9完)--完善
疯狂代码 / ĵ:http://DotNet/Article48752.html
下载完整代码:/2008_10/1224750862_ddvip_7358.rar
9. 完善
大楼已经盖好剩下工作就是装修装修好就可以入住了从本文题目得知这是个可反转排序集合类但我们只实现了降序插入功能如果希望把升序转换为降序该如何办呢?此例解决思路方法是声明个代表排序方向属性Comparer并加入个sort思路方法sort思路方法时根据Comparer属性进行排序:
private ListSortDirection _currentSortDirection = ListSortDirection.Descending;
public SortDirectionComparer
{
get
{
this._sortDirectionComparer;
}
}
public void Sort
{
// 检查是否跟现有排序方向相同.
(this._currentSortDirection != this._sortDirectionComparer.SortDirection)
{
// 如果区别则进行反转.
Array.Reverse(this.keys, 0, this._size);
Array.Reverse(this.values, 0, this._size);
// 设置当前排序.
this._currentSortDirection = this._sortDirectionComparer.SortDirection;
}
}
其中SortDirectionComparer类是第 2节所声明类请参考:
/blog//241235582008113103320661/
接下来再增加个剪除多余空间功能:
//剪除多余空间
public void TrimExcess
{
num1 = ()(this.keys.Length * 0.9);
(this._size < num1)
{
this.Capacity = this._size;
}
}
当然需要给Capacity属性添加思路方法
public Capacity //容量属性
{
get
{
this.keys.Length;
}
{
this.InternalSetCapacity(value, true);
}
}
注意:这样调整空间会导致另外开辟内存以重新存放元素
好最后工作就是增加些构造思路方法比如指定排序方向指定容量以使得这个集合类使用更为灵活:
//用于指定排序方向构造思路方法
public ReversibleSortedList(SortDirectionComparer
: this
{
(comparer != null)
{
this._sortDirectionComparer = comparer;
this._currentSortDirection = _sortDirectionComparer.SortDirection; }
}
//用于指定字典构造思路方法
public ReversibleSortedList(IDictionary
: this(dictionary, (SortDirectionComparer
{
}
//用于指定容量构造思路方法
public ReversibleSortedList( capacity)
{
(capacity < 0)
{
throw ArgumentOutOfRangeException(
"capacity", "Non-negative number required");
}
this.keys = TKey[capacity];
this.values = TValue[capacity];
this._sortDirectionComparer = SortDirectionComparer
this._currentSortDirection = _sortDirectionComparer.SortDirection;
}
//用于指定字典和排序方向构造思路方法
//这个构造思路方法用于在指定集合中创建新字典类
public ReversibleSortedList(IDictionary
SortDirectionComparer
: this((dictionary != null) ? dictionary.Count : 0, comparer)
{
(dictionary null)
{
throw ArgumentNullException("dictionary");
}
dictionary.Keys.CopyTo(this.keys, 0);
dictionary.Values.CopyTo(this.values, 0);
Array.Sort
this._sortDirectionComparer);