我的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;
}
}
答案 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;
}
}