依然不明白Array.Sort参数中myComparer的作用!!!先请看下面的代码,然后....因为从myComparer中的定义中可以看出是相当于对两个比较的参数进行互换,也就是说,比如,x=1, y=2,按正常的比较是返回<0,但是使用了定义的myComparer之后返回的是>0
所以,参数myComparer是不是认为是对Array.Sort排序用倒排序的方法?也就是说仅仅是为了改变排序方向?如果是的话,sort的这个函数
public static void Sort(Array, IComparer); // MSDN 上的定义
中的IComparer参数难道仅仅是为了能够实现排序方向的控制?
using System;
using System.Collections;public class SamplesArray
{ public class myReverserClass : IComparer
{
// Calls CaseInsensitiveComparer.Compare with the parameters reversed.
int IComparer.Compare( Object x, Object y )
{
return( (new CaseInsensitiveComparer()).Compare( y, x ) );
}
} public static void Main()
{
String[] myArr = { "The", "QUICK", "BROWN", "FOX", "jumps", "over", "the", "lazy", "dog" };
IComparer myComparer = new myReverserClass(); Console.WriteLine( "排序前:" );
PrintIndexAndValues( myArr ); Array.Sort( myArr, myComparer );
Console.WriteLine( "排序后:" );
PrintIndexAndValues( myArr );
} public static void PrintIndexAndValues( String[] myArr )
{
for ( int i = 0; i < myArr.Length; i++ )
{
Console.WriteLine( " [{0}] : {1}", i, myArr[i] );
}
Console.WriteLine();
}
}
/*
排序前:
[0] : The
[1] : QUICK
[2] : BROWN
[3] : FOX
[4] : jumps
[5] : over
[6] : the
[7] : lazy
[8] : dog
排序后:
[0] : the
[1] : The
[2] : QUICK
[3] : over
[4] : lazy
[5] : jumps
[6] : FOX
[7] : dog
[8] : BROWN*/
所以,参数myComparer是不是认为是对Array.Sort排序用倒排序的方法?也就是说仅仅是为了改变排序方向?如果是的话,sort的这个函数
public static void Sort(Array, IComparer); // MSDN 上的定义
中的IComparer参数难道仅仅是为了能够实现排序方向的控制?
using System;
using System.Collections;public class SamplesArray
{ public class myReverserClass : IComparer
{
// Calls CaseInsensitiveComparer.Compare with the parameters reversed.
int IComparer.Compare( Object x, Object y )
{
return( (new CaseInsensitiveComparer()).Compare( y, x ) );
}
} public static void Main()
{
String[] myArr = { "The", "QUICK", "BROWN", "FOX", "jumps", "over", "the", "lazy", "dog" };
IComparer myComparer = new myReverserClass(); Console.WriteLine( "排序前:" );
PrintIndexAndValues( myArr ); Array.Sort( myArr, myComparer );
Console.WriteLine( "排序后:" );
PrintIndexAndValues( myArr );
} public static void PrintIndexAndValues( String[] myArr )
{
for ( int i = 0; i < myArr.Length; i++ )
{
Console.WriteLine( " [{0}] : {1}", i, myArr[i] );
}
Console.WriteLine();
}
}
/*
排序前:
[0] : The
[1] : QUICK
[2] : BROWN
[3] : FOX
[4] : jumps
[5] : over
[6] : the
[7] : lazy
[8] : dog
排序后:
[0] : the
[1] : The
[2] : QUICK
[3] : over
[4] : lazy
[5] : jumps
[6] : FOX
[7] : dog
[8] : BROWN*/
{
// Calls CaseInsensitiveComparer.Compare with the parameters reversed.
int IComparer.Compare( Object x, Object y )
{
return( string.Compare((int)x,(int)y);
return( -string.Compare((int)x,(int)y);
}
}
它只是个例子。。
你可以实现它的倒序,正序的排列,也可以按照int,string来进行排序。也可以排列对象等等
或者可以这么说,IComparer参数是在一次完整的Sort中起作用,因此IComparer参数的作用是可以放入一些比较逻辑,比如倒序排序,比如对某些值可以不排序(不排序是不是这个参数为0?)。
http://lokcore.com/sunny/article.asp?id=20 使用比较策略进行比较排序
可以参考!