У меня снова возникла проблема со списком и бинарным поиском.В общем, у меня есть:
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 и хочу найти элемент MyArr (со всеми значениями в нем) в списке TMyList, затем я использую:
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;
Теперь моя проблема в том, что не все результаты верны.В том смысле, что часто у меня есть правильный индекс элемента и в другой раз у меня есть другой индекс, соответствующий другому элементу, в casual.Как я могу это решить?Где у меня ошибка?
Я хочу только найти индекс, соответствующий MyArr в TMyArr.Еще раз большое спасибо.