C#列表<>按 x 然后 y 排序 [英] C# List<> Sort by x then y
问题描述
类似于列表<>OrderBy Alphabetical Order,我们想先按一个元素排序,然后再按另一个元素排序.我们想要实现与
Similar to List<> OrderBy Alphabetical Order, we want to sort by one element, then another. we want to achieve the functional equivalent of
SELECT * from Table ORDER BY x, y
我们有一个包含许多排序函数的类,我们没有问题按一个元素排序.
例如:
We have a class that contains a number of sorting functions, and we have no issues sorting by one element.
For example:
public class MyClass {
public int x;
public int y;
}
List<MyClass> MyList;
public void SortList() {
MyList.Sort( MySortingFunction );
}
我们在列表中有以下内容:
And we have the following in the list:
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 的解决方案.
Stable sort would be preferable, but not required. Solution that works for .Net 2.0 is welcome.
推荐答案
请记住,如果比较所有成员,则不需要稳定排序.根据要求,2.0 解决方案可能如下所示:
Do keep in mind that you don't need a stable sort if you compare all members. The 2.0 solution, as requested, can look like this:
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 对象.
Do note that this 2.0 solution is still preferable over the popular 3.5 Linq solution, it performs an in-place sort and does not have the O(n) storage requirement of the Linq approach. Unless you prefer the original List object to be untouched of course.
这篇关于C#列表<>按 x 然后 y 排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!