我注意到,當使用自定義的IComparer<T>
對.NET中的數組進行排序時,會請求比較項目與自身的比較。爲什麼.NET排序算法要求比較項目與自己?
爲什麼會出現這種情況?當然,這是一個微不足道的優化,看看是否要對相同索引進行比較,並假設結果必須爲零?
示例代碼:
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());
}
隨着輸出(怪比較標記),因爲的Array.Sort()算法改了好幾次
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 ***
無法重現,我的輸出: d Vs的 çVS d ÇVs的 B對d B對C^ B對一個 éVS d –
也許添加您正在使用的框架版本。 – rene
我正在得到與問題完全相同的輸出。 – Jon