이 문제를 해결하려면 몇 가지 제안이 필요합니다. 나는이 데이터 구조가 있습니다 구조화 된 배열 및 검색
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);
을 물론 제대로 동작하지 않습니다. '
[DCC Error] Project1.dpr(98): E2250 There is no overloaded version of 'BinarySearch' that can be called with these arguments
나는 돈 : 그 필요는 비교자를 정의 이해하기 때문에 그래서 쓰기 :
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));
하지만,이 경우이 오류가 나타납니다 내가 실수 한 곳을 이해하지 못한다.
어떻게 해결할 수 있습니까?
이 나에게 사전처럼 보이는 ...... –
예, 가리키고. 며칠 전 예를 보면, 나는 그것이 더 좋았다고 생각합니다. 단지 나는 의심의 여지가있다. 모든 요소를 읽는 데 많은 요소가있는 배열 (백만 단위)이 있기 때문에 4-5 초, 목록은 20-25 초가 걸립니다. 사전이 적은 시간으로 도와 준다면 그것은 나에게도 아주 좋습니다. –