用.Net类库实现排序
排序是经常要用到的功能,遇到排序问题,第一感觉就是自己写排序算法,其实还可以用.Net类库实现排序功能。
如:SortedList,Array等,他们都能根据ICompare接口或者IComparable接口实现排序,像一些常用类型如:string,int都实现了IComparable接口。string 还有.net提供的ICompare的实现StringComparer类,此类提供了许多排序方式。
下面的例子用Array实现排序,虽然只是一个Int数组,但是其他复杂类型都可以用相同方法处理
实现ICompare接口是最灵活的排序实现。如果只是Int数组的排序,通过Array的Sort(),Reverse就可以了,Sort的无参重载会自动调用int的IComparable实现
如:SortedList,Array等,他们都能根据ICompare接口或者IComparable接口实现排序,像一些常用类型如:string,int都实现了IComparable接口。string 还有.net提供的ICompare的实现StringComparer类,此类提供了许多排序方式。
下面的例子用Array实现排序,虽然只是一个Int数组,但是其他复杂类型都可以用相同方法处理
public void Sort()
{
int[,] i = new int[2, 3] { { 1, 2, 3 }, { 4, 5, 6 } };
int[] b = new int[6];
for (int j = 0; j < i.GetLength(0); j++)
{
for (int k = 0; k < i.GetLength(1); k++)
{
int l = i.GetLength(1);
b[j * l + k] = i[j, k];
}
}
ReverserSort ms = new ReverserSort();
Array.Sort(b,ms);
}
}
public class ReverserSort:IComparer<int>
{
int IComparer<int>.Compare(int x, int y)
{
return -(x - y);
}
}
Sort()实现了由大到小的排序。排序的顺序通过IComparer接口规定。如果把返回值的“-”去掉,则按照由小到大的顺序。{
int[,] i = new int[2, 3] { { 1, 2, 3 }, { 4, 5, 6 } };
int[] b = new int[6];
for (int j = 0; j < i.GetLength(0); j++)
{
for (int k = 0; k < i.GetLength(1); k++)
{
int l = i.GetLength(1);
b[j * l + k] = i[j, k];
}
}
ReverserSort ms = new ReverserSort();
Array.Sort(b,ms);
}
}
public class ReverserSort:IComparer<int>
{
int IComparer<int>.Compare(int x, int y)
{
return -(x - y);
}
}
实现ICompare接口是最灵活的排序实现。如果只是Int数组的排序,通过Array的Sort(),Reverse就可以了,Sort的无参重载会自动调用int的IComparable实现