我刚刚开始使用泛型,我目前在多个字段上进行排序时遇到问题.
案例:
我有一个PeopleList作为a TObjectList<TPerson>,我希望能够通过一次选择一个排序字段来制作类似Excel的排序功能,但尽可能保持先前的排序.
编辑:必须可以在运行时更改字段排序顺序.(即,在一种情况下,用户想要排序顺序A,B,C - 在另一种情况下,他想要B,A,C - 在另一个A,C,D中)
让我们说我们有一个未分类的人员列表:
Lastname Age
---------------------
Smith 26
Jones 26
Jones 24
Lincoln 34
Run Code Online (Sandbox Code Playgroud)
现在,如果我按LastName排序:
Lastname ? Age
---------------------
Jones 26
Jones 24
Lincoln 34
Smith 26
Run Code Online (Sandbox Code Playgroud)
然后如果我按年龄排序,我想要这个:
Lastname ? Age ?
---------------------
Jones 24
Jones 26
Smith 26
Lincoln 34
Run Code Online (Sandbox Code Playgroud)
为了做到这一点,我制作了两个比较器 - 一个TLastNameComparer和一个TAgeComparer.
我现在打电话
PeopleList.Sort(LastNameComparer)
PeopleList.Sort(AgeComparer)
Run Code Online (Sandbox Code Playgroud)
现在我的问题是,这不会产生我想要的输出,但是
Lastname ? Age ?
---------------------
Jones 24
Smith 26
Jones 26
Lincoln 34
Run Code Online (Sandbox Code Playgroud)
史密斯,26岁出现在琼斯之前,26岁.所以看起来它没有保留以前的排序.
我知道我只能制作一个比较LastName和Age的比较器 - 但问题是,我必须为TPerson中存在的每个字段组合制作比较器.
是否可以使用多个TComparers做我想做的事情,或者我如何实现我想要的?
仅供参考未来的访问者,这(几乎)是我现在使用的代码.
首先,我创建了一个基类TSortCriterion<T>,TSortCriteriaComparer<T> …