程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#泛型秘訣(5.1)(1)

C#泛型秘訣(5.1)(1)

編輯:關於C語言

4.8 反轉Sorted List裡的內容

問題

您希望在數組和列表類型中可以反轉sorted list裡的內容同時又維持SortedList和SortedList<T>類原來的功能。無論是SortedList還是泛型SortedList<T>類都直接提供了完成這個功能的方法而又不需要重填列表。

解決方案

ReversibleSortedList<TKey, TValue>類提供了這些功能,它基於SortedList<TKey, TValue>類,所以擁有相同的功能,它提供了額外的功能是很容易反轉已排序的列表。

在實例化ReversibleSortedList<TKey, TValue>之後,鍵是整數類型,值是字符串類型,一連串無序的數字和它們的文本表達被插入到列表中。這些項目是這樣顯示的:

ReversibleSortedList<int, string> rsl = new ReversibleSortedList<int, string>();
rsl.Add(2, "2");
rsl.Add(5, "5");
rsl.Add(3, "3");
rsl.Add(1, "1");
foreach (KeyValuePair<int, string> kvp in rsl)
{
  Debug.WriteLine("\t" + kvp.Key + "\t" + kvp.Value);
}

列表輸出顯示為按升序排序(默認):

1   1
2   2
3   3
5   5

現在排列順序通過設置ReversibleSortedList的SortDirection屬性被反轉為降序。為了重新排序需要調用Sort()方法。結果如下:

// 轉換排序方向.
rsl.Comparer.SortDirection = ListSortDirection.Descending;
// 重排列表.
rsl.Sort();
foreach (KeyValuePair<int, string> kvp in rsl)
{
  Debug.WriteLine("\t" + kvp.Key + "\t" + kvp.Value);
}

這一次,輸出為降序:

5   5
3   3
2   2
1   1

當把一個新項添加進列表,它將按當前的排列順序被添加進去,但在添加完所有項後馬上進行反轉,就可以保持列表中元素的順序。

rsl.Add(4, "4");
    foreach (KeyValuePair<int, string> kvp in rsl)
    {
        Debug.WriteLine("\t" + kvp.Key + "\t" + kvp.Value);
    }
    // 轉換排序方向.
    rsl.Comparer.SortDirection = ListSortDirection.Ascending;
    // 重排列表.
    rsl.Sort();
    foreach (KeyValuePair<int, string> kvp in rsl)
    {
        Debug.WriteLine("\t" + kvp.Key + "\t" + kvp.Value);
}

可以看到新項即按降序也按升序排列:

5   5
4   4
3   3
2   2
1   1
1   1
2   2
3   3
4   4
5   5
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved