如果我有一个具有更多字段的泛型列表,例如:
PMyList = record
Field1, Field2, ... FieldN : Integer;
end;
TMyList = List<PMyList>;
为了订购具有条件的列表,请选择运行时(例如:field2然后field2,或者:field3然后field1然后field2等),有一些解决方案,或者我需要对我想要的所有可能的订单组合进行比较构造吗?
我的想法是,如果记录是N字段,我想过这样定义的数组:
MyArray = array [1..n] of Integer;
并为确定sord标准的数组元素分配一个渐进值,例如,如果MyArray如下:
MyArray = (5, 1, 3, 4, 2)
意味着我的列表需要首先对字段5进行排序,然后对字段1进行排序,然后对字段3进行排序,然后对字段4进行排序,然后对字段2进行排序。
我的问题是:我可以使用一个唯一的结构来比较我的清单吗?
非常感谢您的帮助。
最佳答案
我将基于您的previous question表示法。我还要将MyArray
重命名为FieldPriority
。
因此,FieldPriority[1]
标识主要比较字段,FieldPriority[2]
标识辅助比较字段,依此类推。
完成此操作后,您的compare函数将如下所示:
type
TMyRecord = record
Value: array [1..5] of Integer;
end;
function Compare(const Left, Right: TMyRecord): Integer;
var
i, Field: Integer;
begin
for i := 1 to 5 do
begin
Field := FieldPriority[i];
Result := CompareInt(Left.Value[Field], Right.Value[Field]);
if Result<>0 then
exit;
end;
end;
如果将记录中的整数声明为数组而不是单独声明为整数,则效果会更好。这样一来,您就可以像在这里一样为它们建立索引。
自然,所有这些都可以概括为处理任意大小的数组。
关于delphi - 带条件的订单 list 选择运行时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8376182/