IComparer<T>
custom を使用して .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());
}
出力あり(奇妙な比較がマークされています):
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 ***