gpt4 book ai didi

delphi - 列表和 BinarySearch 索引并非全部正确

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

我又遇到了一些关于列表和二进制搜索的问题。一般来说,我有:

type
TMyArr = array [1..5] of Integer;

PMyList = record
Comb: TMyArr;
... // other fields
end;
TMyList = TList<PMyList>;

var
MyArr: TMyArr;
MyList: TMyList;
rMyList: PMyList;

我加载数组 MyArr 中的值并希望在列表 TMyList 中查找元素 MyArr (包含其中的所有值),然后我使用:

rMyList.Comb := MyArr;
MyList.BinarySearch(rMyList, iIndex3, TDelegatedComparer<PMyList>.Construct(Compare));

比较如此定义:

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

function Compare(const Left, Right: PMyList): Integer;
begin
Result := CompareInt(Left.Comb[1], Right.Comb[1]);
if Result = 0 then
Result := CompareInt(Left.Comb[2], Right.Comb[2]);
if Result = 0 then
Result := CompareInt(Left.Comb[3], Right.Comb[3]);
if Result = 0 then
Result := CompareInt(Left.Comb[4], Right.Comb[4]);
if Result = 0 then
Result := CompareInt(Left.Comb[5], Right.Comb[5]);
end;

现在,我的问题是并非每个结果都是正确的。从某种意义上说,我经常有正确的元素索引,而有时我有与其他元素相对应的其他索引,随意。我能解决吗?我哪里有错误?
我只想在 TMyArr 中找到 MyArr 对应的索引。再次非常感谢。

最佳答案

你的Compare功能很好。如果二分查找无法正常工作,则只能是因为列表未按 Compare 定义的顺序排序。完成填充后、开始搜索之前,请调用列表上的 Sort 函数。当您调用Sort时,您必须确保它使用您的比较函数。

关于delphi - 列表和 BinarySearch 索引并非全部正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8368243/

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