C# List<> Sort by x then y
.net, c#, sorting
Solution
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);
});
}
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.
Problem
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 ``` Stable sort would be preferable, but not required. Solution that works for .Net 2.0 is welcome.