Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.157 Beiträge
Delphi 12 Athens
|
AW: Array Inhalt versetzen?
9. Mai 2020, 17: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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
Geändert von himitsu ( 9. Mai 2020 um 18:30 Uhr)
|
|
Zitat
|