【问题标题】:Comparing for sorting in different ways比较不同方式的排序
【发布时间】:2014-04-13 20:42:49
【问题描述】:

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

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);

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

【问题讨论】:

标签: c# sorting compare icomparable


【解决方案1】:

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

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

顺便说一句,Sort 方法正在修改您的列表,它不会返回任何内容。因此您无需将其分配回您的列表。

【讨论】:

  • 我只是想知道我采用的方法是否是最佳方法。从你的回复我认为是。感谢您的可变性评论。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多