在利用.NetFramework编程的时候。
SortedList对于规模比较小的索引应用上,真的比较方面。但是随着规模的增长,这将会变成一场噩梦——时间的消耗比简单的插入排序还恐怖(实际上它就变成了插入排序);
算了,还是用List吧,List.Sort()据说利用的是带有一堆检查机制的QuickSort(快速排序),尤其是对于比较小的数组,速度可以超过手写的普通QuickSort。
参见(http://www.pin5i.com/showtopic-24424.html)
但是对于索引/查找的应用,有Key和Value两个域。排序是对于一个域进行的。
解决方法很简单:
1. 建立包含Key和Value作为成员变量的类C_Ele
2. 链表:List<C_Ele>
3. 重写List.Sort()需要用到的比较函数:public class DinoComparer: IComparer<string>
4. 使用的时候,DinoComparer dc = new DinoComparer(); myList.Sort(dc);
参考(http://msdn.microsoft.com/zh-cn/library/234b841s(VS.85).aspx)
C#
using System; using System.Collections.Generic; public class DinoComparer: IComparer<string> { public int Compare(string x, string y) { if (x == null) { if (y == null) { // If x is null and y is null, they're // equal. return 0; } else { // If x is null and y is not null, y // is greater. return -1; } } else { // If x is not null... // if (y == null) // ...and y is null, x is greater. { return 1; } else { // ...and y is not null, compare the // lengths of the two strings. // int retval = x.Length.CompareTo(y.Length); if (retval != 0) { // If the strings are not of equal length, // the longer string is greater. // return retval; } else { // If the strings are of equal length, // sort them with ordinary string comparison. // return x.CompareTo(y); } } } } } public class Example { public static void Main() { List<string> dinosaurs = new List<string>(); dinosaurs.Add("Pachycephalosaurus"); dinosaurs.Add("Amargasaurus"); dinosaurs.Add("Mamenchisaurus"); dinosaurs.Add("Deinonychus"); Display(dinosaurs); DinoComparer dc = new DinoComparer(); Console.WriteLine("/nSort with alternate comparer:"); dinosaurs.Sort(dc); Display(dinosaurs); SearchAndInsert(dinosaurs, "Coelophysis", dc); Display(dinosaurs); SearchAndInsert(dinosaurs, "Oviraptor", dc); Display(dinosaurs); SearchAndInsert(dinosaurs, "Tyrannosaur", dc); Display(dinosaurs); SearchAndInsert(dinosaurs, null, dc); Display(dinosaurs); } private static void SearchAndInsert(List<string> list, string insert, DinoComparer dc) { Console.WriteLine("/nBinarySearch and Insert /"{0}/":", insert); int index = list.BinarySearch(insert, dc); if (index < 0) { list.Insert(~index, insert); } } private static void Display(List<string> list) { Console.WriteLine(); foreach( string s in list ) { Console.WriteLine(s); } } } /* This code example produces the following output: Pachycephalosaurus Amargasaurus Mamenchisaurus Deinonychus Sort with alternate comparer: Deinonychus Amargasaurus Mamenchisaurus Pachycephalosaurus BinarySearch and Insert "Coelophysis": Coelophysis Deinonychus Amargasaurus Mamenchisaurus Pachycephalosaurus BinarySearch and Insert "Oviraptor": Oviraptor Coelophysis Deinonychus Amargasaurus Mamenchisaurus Pachycephalosaurus BinarySearch and Insert "Tyrannosaur": Oviraptor Coelophysis Deinonychus Tyrannosaur Amargasaurus Mamenchisaurus Pachycephalosaurus BinarySearch and Insert "": Oviraptor Coelophysis Deinonychus Tyrannosaur Amargasaurus Mamenchisaurus Pachycephalosaurus */