gpt4 book ai didi

arrays - 使用 TArray 对大量数据进行排序问题

转载 作者:行者123 更新时间:2023-12-03 15:42:53 24 4
gpt4 key购买 nike

这是什么原因TArray.Sort<Mytype>当我比较中有大量数字时不起作用?

我的代码如下(Delphiy Tokyo):

Interface

Type
RCInd = record
Num : Integer;
Ger : Integer;
Confirmed : Boolean;
Total : Real;
End;

TArrInd = TArray<RCInd>;

Procedure SortInd (Var PArrayInd : TArrInd);

Implementation

Procedure SortInd (Var PArrayInd : TArrInd);
begin
TArray.Sort<RCInd>( PArrayInd,TComparer<RCInd>.Construct
( function (Const Rec1, Rec2 : RCInd) : Integer
begin
Result := - ( Trunc(Rec1.Total) - Trunc(Rec2.Total) );
end )
);
end;

......

当 Rec1.Total 和 Rec2.Total 的值在整数限制内时,此排序工作正常,但当值超过整数限制时,排序过程不起作用!它在 PArrayInd 中生成一组未排序的数据。

这是怎么回事?

最佳答案

问题是溢出之一。实数值溢出整数类型。

比较函数返回负数表示小于,正数表示小于。大于表示大于,零表示等于。您使用算术是导致问题的原因,导致溢出。而是使用比较运算符。

function(const Rec1, Rec2: RCInd): Integer
begin
if Rec1.Total < Rec2.Total then
Result := 1
else if Rec1.Total > Rec2.Total then
Result := -1
else
Result := 0;
end;
<小时/>

这个问题的问题是尝试将实数值拟合为整数,但即使您有整数数据,也不应该将算术用于比较函数。考虑表达式

Low(Integer) - 1

这会导致溢出。作为一般原则,始终使用比较运算符来实现比较函数。

关于arrays - 使用 TArray<Myrectype> 对大量数据进行排序问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51111810/

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