类似于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的解决方案。
3 回答
慕容708150
TA贡献1831条经验 获得超4个赞
请记住,如果比较所有成员,则不需要稳定的排序。根据要求,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对象保持不变。
阿波罗的战车
TA贡献1862条经验 获得超6个赞
对于可以使用LINQ OrderBy和ThenBy(或者,ThenByDescending如果需要)的.Net版本:
using System.Linq;
....
List<SomeClass>() a;
List<SomeClass> b = a.OrderBy(x => x.x).ThenBy(x => x.y).ToList();
注意:对于.Net 2.0(或如果您不能使用LINQ),请参阅Hans Passant对这个问题的回答。
- 3 回答
- 0 关注
- 833 浏览
添加回答
举报
0/150
提交
取消