如果我将自定义 IComparer 传递给 List 的 Sort() 方法的实例,是否会使用同一项目调用比较器的 Compare(x,y) 方法?
即。是否有可能调用 Compare(x,x)
。
编辑:对列表项不同的情况更感兴趣。
最佳答案
我写了一个测试程序来试试看。看起来它实际上执行 Compare() 相同的元素(至少为相同的项目调用 Compare() 两次)。在此程序中,调用 Compare() 时使用参数 (2, 2)。
using System;
using System.Collections.Generic;
static class Program
{
class MyComparer : Comparer<int>
{
public override int Compare(int x, int y)
{
Console.WriteLine("Compare(" + x + ", " + y + ")");
if (x < y) return -1;
if (x > y) return 1;
return 0;
}
}
static void Main()
{
MyComparer comparer = new MyComparer();
List<int> list = new List<int> { 1, 2, 3 };
list.Sort(comparer);
return;
}
}
输出是:
Compare(1, 2)
Compare(1, 3)
Compare(2, 3)
Compare(1, 2)
Compare(2, 2)
Compare(2, 3)
Compare(2, 2)
关于c# - 在 List<T>.Sort() 方法中,项目是否与自身进行了比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7373652/