作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是什么原因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/
这是什么原因TArray.Sort当我比较中有大量数字时不起作用? 我的代码如下(Delphiy Tokyo): Interface Type RCInd = record N
我是一名优秀的程序员,十分优秀!