Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.217 Beiträge
Delphi 12 Athens
|
AW: Array Inhalt versetzen?
9. Mai 2020, 18:06
Delphi-Quellcode:
var
A: TArray<Integer>;
T: Integer;
i: Integer;
begin
// Hoch - BubbleMode
for i := High(A) - 1 downto 0 do begin
T := A[i];
A[i] := A[i + 1];
A[i + 1] := T;
end;
// Hoch - SingleMove
T := A[0];
for i := High(A) - 1 downto 0 do
A[i] := A[i + 1];
A[High(A)] := T;
// Runter
T := A[High(A)];
for i := High(A) downto 1 do
A[i] := A[i - 1];
A[0] := T;
// Hoch - FullMove
T := A[0];
FinalizeArray(@A[0], TypeInfo(T), 1); // eigentlich FinalizeRecord, aber siehe InitializeRecord
Move(A[1], A[0], High(A) * SizeOf(A));
InitializeArray(@A[High(A)], TypeInfo(T), 1); // InitializeRecord, aber das ist nicht öffentlich und geht letztendlich eh nur auf die Array-Funktion
A[High(A)] := T;
// ohne das Finalize und Initialize, wenn man für T "immer" eine Variable von ungemanagtem Typ verwendet, wie z.B. Integer oder ein Byte-Array,
// denn bei Typen ala String, DynArray, Interface oder Variant zerschießt man sich sonst das automatische Speichermanagement, wenn man das nicht beachtet (eines von Beidem)
Move(A[0], T, SizeOf(A));
Move(A[1], A[0], High(A) * SizeOf(A));
Move(T, A[High(A)], SizeOf(A));
Die Dinge ohne Move haben den Vorteil, dass man nichts falsch und kaputt machen kann. (so lange man die Indexprüfung nicht deaktiviert)
$2B or not $2B
Geändert von himitsu ( 9. Mai 2020 um 19:30 Uhr)
|
|
Zitat
|