使用自定义比较器对重复键进行排序

时间:2015-09-30 07:03:24

标签: c# list sorting icomparer

我的List inputColl类型MyValue有许多重复键:

myValue1.Id=100;
myValue2.Id=100;
...etc

我有自定义比较器来比较MyValue的两个Id元素:

inputColl.Sort(myValueComparer);

我做错了什么?

的Comparer:

public class MyValueComparerById : IComparer<MyValue>
{
    public int Compare(MyValue x, MyValue y)
    {
        if (x.Id == y.Id)
            return 0;
        else if (x.Id > y.Id)
            return -1;
        else if (x.Id < y.Id)
            return 1;

        return 0;
    }
}

2 个答案:

答案 0 :(得分:4)

除非你的平等比较器没有得到很好的实施,否则你的解决方案应该可行。

但我建议使用linq更简单的方法:

inputCol = inputCol.OrderBy(o => o.Id).ToList();

答案 1 :(得分:4)

你已经有一个int比较器,所以最好使用它而不是重写相同的逻辑:

public class MyValueComparerById : IComparer<MyValue>
{
    public int Compare(MyValue x, MyValue y)
    {
         return x.Id.CompareTo(y.Id);        
    }
}

**更新编辑**

对于进一步的改进,您可能希望在Id相等的情况下考虑进行额外的比较:

public class MyValueComparerById : IComparer<MyValue>
{
    public int Compare(MyValue x, MyValue y)
    {
        var firstResult = x.Id.CompareTo(y.Id);        
        if (firstResult == 0)
        {
            // I'm assuming that MyValue has an additional string property named 'SomeName'
            return x.SomeName.CompareTo(y.SomeName);
        }
        return firstResult;
    }
}