我需要一些建議來解決這個問題。我有這樣的數據結構:結構化數組和搜索
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並獲得價值。 搜索,我用的binarySearch寫:
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
和我不不明白我犯了什麼錯誤。
我該如何解決?
這看起來像一本字典給我...... –
是的,事實上。看幾天前的例子,我認爲這樣比較好。只是我有一些疑問。因爲數組有很多元素(以百萬爲單位)用於讀取所有數據,我需要4-5秒,並且使用列表直到20-25秒。如果字典用更少的時間幫助我,那對我來說也是非常好的。 –