我注意到,在使用 custom 对 .NET 中的数组进行排序时IComparer<T>
,会请求将项目与自身进行比较。
为什么会这样?看看是否要对相同的索引进行比较,并假设结果必须为零,这肯定是一个微不足道的优化?
示例代码:
class Comparer : IComparer<string>
{
public int Compare(string x, string y)
{
Console.WriteLine("{0} vs {1}", x, y);
return string.Compare(x, y);
}
}
static void Main(string[] args)
{
var values = new[] {"A", "D", "C", "B", "E"};
Array.Sort(values, new Comparer());
}
输出(标记了奇怪的比较):
A vs C
A vs E
C vs E
A vs C
D vs C
C vs E
C vs B
C vs C ***
C vs C ***
A vs B
A vs B
A vs A ***
A vs B
A vs A ***
D vs E
D vs E
D vs D ***
D vs E
D vs D ***