gpt4 book ai didi

delphi - 结构化数组和搜索

转载 作者:行者123 更新时间:2023-12-02 01:31:55 26 4
gpt4 key购买 nike

我需要一些建议来解决这个问题。我有这个数据结构:

type
QmyArray = array of integer;
PmyArray = record
element: Qmyarray;
value: integer;
end;
TMyArray = array of Pmyarray;

var
myarray: tmyArray;
myvalue: qmyarray;

我正确设置了 myarray 的所有值,并且 myarray.element 的所有值都正确排序,这很好。我遇到的问题是当我想在 myarray 中搜索 myvalue 并获取值时。对于搜索,我使用二进制搜索并编写:

tarray.BinarySearch(myarray, myvalue, index);

当然它不起作用。因为我知道需要定制比较器所以我写:

function CompareB(const Left, Right: integer): Integer;
begin
if Left < Right then
Result := -1
else if Left > Right then
Result := 1
else
Result := 0;
end;

function CompareA(const Left, Right: pmyarray): Integer;
var
iIndex: Integer;
begin
Result := CompareB(Left.element[0], Right.element[0]);
for iIndex := 1 to High(Right.element) do
if Result = 0 then
Result := CompareB(Left.element[iIndex], Right.element[iIndex]);
end;

并尝试:

tarray.BinarySearch(myarray, myvalue, index, TComparer<Pmyarray>.Construct(CompareA));

但在这种情况下我收到此错误:

[DCC Error] Project1.dpr(98): E2250 There is no overloaded version of 'BinarySearch' that can be called with these arguments

我不明白我在哪里犯了错误。

如何解决?

最佳答案

您有一个错误,myvalue 变量的类型应该是 PMyArray,而不是 QmyArray。下次遇到此类问题时,请尝试使用 TArray.BinarySearch 的长手写版本,以便 Code Insight 实际上显示有意义的类型名称。

当你写下:

TArray.BinarySearch(myarray, myvalue, index, iComparer)

编译器需要根据参数猜测数组的类型。如果 myarraymyvalue 的类型不匹配,编译器将无法判断您真正想要什么,并且代码洞察无法真正向您显示它想要什么。但是您可以通过使用以下语法告诉它要操作的数组类型来帮助它:

TArray.BinarySearch<PmyArray>(myarray, myvalue, index, iComparer)

这样,编译器就知道您打算处理 PmyArray 数组。代码洞察也知道这一点,并向您显示它所需的确切参数类型。

这有效:

program Project9;

{$APPTYPE CONSOLE}

uses
SysUtils, Generics.Collections, Generics.Defaults;

type
QmyArray = array of Integer;
PmyArray = record
element: QmyArray;
value: Integer;
end;
TMyArray = array of PmyArray;

var myarray: TMyArray;
myvalue: PmyArray;
FoundIndex: Integer;

function CompareB(const Left, Right: integer): Integer;
begin
if Left < Right then
Result := -1
else if Left > Right then
Result := 1
else
Result := 0;
end;

function CompareA(const Left, Right: pmyarray): Integer;
var
iIndex: Integer;
begin
Result := CompareB(Left.element[0], Right.element[0]);
for iIndex := 1 to High(Right.element) do
if Result = 0 then
Result := CompareB(Left.element[iIndex], Right.element[iIndex]);
end;

begin
TArray.BinarySearch<PmyArray>(myarray, myvalue, FoundIndex, TComparer<PmyArray>.Construct(CompareA));
end.

关于delphi - 结构化数组和搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8927401/

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