Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.157 Beiträge
 
Delphi 12 Athens
 
#20

AW: Array Inhalt versetzen?

  Alt 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)
  Mit Zitat antworten Zitat