我假設你已經在索引在你的代碼中排序能力,而不會試圖解釋如何在這裏排序。 RTL爲此提供了TArray.Sort<T>
。
而不是排序值,排序索引。添加一個間接級別。
- 創建一個包含索引0,1,...,N-1的整數數組。
- 對這個整數數組進行排序。
- 當比較指數陣列中的兩個值L和R,而不是比較L和R時,請比較
X[L]
和X[R]
。
因此,對最後一點擴大,標準比較功能時排序整數看起來是這樣的:
function Compare(L, R: Integer): Integer;
begin
if L<R then
Result := -1
else if L>R then
Result := 1
else
Result := 0;
end;
而是你在這一點上適用間接:
function Compare(L, R: Integer): Integer;
begin
if X[L]<X[R] then
Result := -1
else if X[L]>X[R] then
Result := 1
else
Result := 0;
end;
在這個過程結束時,你有指標告訴你點的順序。第i個點是:作爲間接排序
X[Indices[i]], Y[Indices[i]]
這種技術是已知的。
雖然您可能尚未正確定義數據結構,但您提出的問題確實存在。而不是兩個不同的陣列,一個含有X座標,以及包含Y的一個座標,它似乎更適合於存儲點的單一陣列:
type
TPoint = record
X: Real;
Y: Real;
end;
var
Points: array of TPoint;
現在,您可以通過訂購的X
值進行排序Points
,但交換全部點。以這種方式表示數據時,座標不可能混亂。並且X
座標永遠無法與其匹配的座標Y
分開。
爲什麼不使用Array或RealPoint? '類型 TRealPoint =記錄 x:Double; y:Double; y:Double; 結束; aArray = TRealPoint數組;' – bummi 2014-09-05 10:46:18
實際的問題已被簡化,以解釋我一直在嘗試做什麼,實際上是大量的數組,這是更大的結構的一部分,需要大量的工作來完成重寫你建議的方式 hooray遺留的代碼太多了,難以重寫 – 2014-09-05 10:53:21