gpt4 book ai didi

sorting - Delphi 泛型 : TArray. 排序

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

我刚刚开始接触这个。

PNode = ^TNode;

TNode = record
Obstacle : boolean;
Visited : boolean;
GCost : double; // Distance from Starting Node
HCost : double; // Distance from Target Node
x : integer;
y : integer;
vecNeighBour : array of PNode;
Parent : PNode;
end;

OnFormShow 我填充数组:

 SetLength(Node,4,4);

Image1.Height:=Length(Node)*50;
Image1.Width:=Length(Node)*50;

for x := Low(Node) to High(Node) do
for y := Low(Node) to High(Node) do
begin
Node[x,y].Obstacle:=false;
Node[x,y].Visited:=false;
Node[x,y].GCost:=infinity;
Node[x,y].HCost:=infinity;
Node[x,y].x:=x;
Node[x,y].y:=y;
end;

现在我想按 HCost 对该数组进行排序,所以我尝试了这个。

  TArray.Sort<TNode>(Node , TComparer<TNode>.Construct(
function(const Left, Right: TNode): double
begin
if Left.HCost > Right.HCost then
Result:=Left.HCost
else
Result:=Right.HCost;
end));

我对这件事的了解严重缺乏。我从 Delphi 收到错误

"Incompatible types: 'System.Gerenics.Defaults.TComparison and 'Procedure'

我在这里做错了什么?

最佳答案

比较函数必须返回一个Integer值。它的定义如下:

type
TComparison<T> = reference to function(const Left, Right: T): Integer;

您的函数返回错误的类型。

function CompareDoubleInc(Item1, Item2: Double): Integer;
begin
if Item1=Item2 then begin
Result := 0;
end else if Item1<Item2 then begin
Result := -1
end else begin
Result := 1;
end;
end;

....

TArray.Sort<TNode>(
Node,
TComparer<TNode>.Construct(
function(const Left, Right: TNode): Integer
begin
Result := CompareDoubleInc(Left.HCost, Right.HCost);
end
)
);

或者,如果您想让它变得更简单,您可以委托(delegate)给默认的双比较器:

TArray.Sort<TNode>(
Node,
TComparer<TNode>.Construct(
function(const Left, Right: TNode): Integer
begin
Result := TComparer<Double>.Default.Compare(Left.HCost, Right.HCost);
end
)
);

关于sorting - Delphi 泛型 : TArray. 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49814026/

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