gpt4 book ai didi

delphi - 带有条件的订单列表选择运行时

转载 作者:行者123 更新时间:2023-12-03 19:34:43 24 4
gpt4 key购买 nike

如果我有一个包含更多字段的泛型列表,例如:

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)

意味着我的列表需要首先对 field5 进行排序,然后是 field1,然后是 field3,然后是 field4,然后是 field2。
然后我的问题是:我可以只使用一个构造比较我的列表吗?

非常感谢您的帮助。

最佳答案

我将根据您的 previous question .我还要重命名MyArrayFieldPriority .

所以,FieldPriority[1]标识主要比较字段 FieldPriority[2]标识次要比较字段等。

有了这个,你的比较函数看起来像这样:

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 - 带有条件的订单列表选择运行时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8376182/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com