Я предполагаю, что у вас уже есть возможность сортировки в вашем коде, и я не буду пытаться объяснить, как сортировать здесь. Для этой цели RTL предоставляет TArray.Sort<T>
.
Вместо сортировки значений, индексы сортировки. Добавьте уровень косвенности.
- Создайте массив целых чисел,
Indices
, содержащий индексы 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;
В конце этого процесса у вас есть индексы, которые сообщают вам порядок очков. Я й точка:
X[Indices[i]], Y[Indices[i]]
Этот метод известен как непрямой сортировки.
Проблема, которую вы представляете, предполагает, что вы, возможно, не правильно определили свои структуры данных.Вместо двух отдельных массивов, один, содержащие координаты X, и один, содержащий Y координаты, казалось бы, более целесообразно хранить один массив точек:
type
TPoint = record
X: Real;
Y: Real;
end;
var
Points: array of TPoint;
Теперь вы можете сортировать Points
при заказе на X
значений , но обмениваясь целыми точками. Когда вы представляете данные таким образом, нет никакой возможности для смещения координат. А координата X
никогда не может быть отделена от соответствующей координаты Y
.
Почему бы не использовать массив или RealPoint? 'type TRealPoint = Запись x: Двойной; y: Двойной; Конец; aArray = Array of TRealPoint; ' – bummi
Фактическая проблема была упрощена, чтобы объяснить, что я пытаюсь сделать, и на самом деле представляет собой большое количество массивов, которые являются частью еще большей структуры, которая потребует большой работы перепишите так, как вы предлагаете ура для устаревшего кода, который слишком сильно опасен для перезаписи –