类似于List <> OrderBy按字母顺序Order,我们要按一个元素排序,然后再按另一个元素排序。我们想要达到以下功能
SELECT * from Table ORDER BY x, y
我们有一个包含许多排序功能的类,并且按一个元素排序没有问题。 例如:
public class MyClass { public int x; public int y; } List<MyClass> MyList; public void SortList() { MyList.Sort( MySortingFunction ); }
我们在列表中有以下内容:
Unsorted Sorted(x) Desired --------- --------- --------- ID x y ID x y ID x y [0] 0 1 [2] 0 2 [0] 0 1 [1] 1 1 [0] 0 1 [2] 0 2 [2] 0 2 [1] 1 1 [1] 1 1 [3] 1 2 [3] 1 2 [3] 1 2
稳定的排序将是可取的,但不是必需的。欢迎使用适用于.Net 2.0的解决方案。
请记住,如果比较所有成员,则不需要稳定的排序。根据要求,2.0解决方案可以如下所示:
public void SortList() { MyList.Sort(delegate(MyClass a, MyClass b) { int xdiff = a.x.CompareTo(b.x); if (xdiff != 0) return xdiff; else return a.y.CompareTo(b.y); }); }
请注意,此2.0解决方案仍然比流行的3.5 Linq解决方案更可取,它执行就地排序并且不具有Linq方法的O(n)存储要求。除非您当然希望原始的List对象保持不变。