按自定义比较器对具有重复键的列表进行排序
本文关键字:列表 排序 比较器 自定义 | 更新日期: 2023-09-27 18:15:07
我有MyValue
类型的List
inputColl
具有许多重复密钥:
myValue1.Id=100;
myValue2.Id=100;
...etc
和我有自定义比较器比较Id
两个MyValue
元素:
inputColl.Sort(myValueComparer);
我做错了什么?
比较器:
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;
}
}
除非您的相等比较器实现得不差,否则您的解决方案应该有效。
但是我建议一个更简单的方法,使用linq:
inputCol = inputCol.OrderBy(o => o.Id).ToList();
您已经有一个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;
}
}