以不同方式进行排序的比较

本文关键字:排序 比较 方式进 | 更新日期: 2023-09-27 17:58:12

我有一个实现IComparable的类。它是有效的,但比较是静态的,即它总是与它实现的排序相同。通过参数引入比较的好方法是什么,即如果我们有:

class Poo : IComparable { 
  public int A { ... };
  public int B { ... };
  ... 
}
IEnumerable<Foo> list = ...;
list = list.Sort(???);

我想根据在问号处传递给Sort的参数,对AB列表进行排序。最有效的方法是什么?

目前,我想到的最好的方法是声明我传递给Sort的几个方法作为委托。

private static int CompareWrtA(Foo foo1, Foo foo2) { ... }
private static int CompareWrtB(Foo foo1, Foo foo2) { ... }
if(withRespectToA)
  list = list.Sort(CompareWrtA);
else
  list = list.Sort(CompareWrtB);

但这并不是最好的方式。批评是受欢迎的。

以不同方式进行排序的比较

如果你想简化该语句,你可以这样写:

list.Sort((x,y) => withRespectToA ? CompareWrtA(x,y) : CompareWrtB(x,y));

顺便说一句,Sort方法正在修改您的列表,它不返回任何内容。所以你不需要把它重新分配到你的列表中。