Noch einfacher wäre ein gleichlanges Integer-Array, in welchem die Elemente auf die gewünschte Position des String-Arrays zeigen.
Da die Strings selbst auch nur als Pointer in den Array-Elementen vorliegen, ergibt sich m.E. hier kein nennenswerter Vorteil.
Ich kann auch mit folgendem Code keinen Fehler feststellen (getestet in 10.3.3):
Delphi-Quellcode:
procedure RotateRight(var A: TArray<String>);
begin
Insert(A[Length(A)], A, 0);
Delete(A, High(A), 1);
end;
procedure RotateLeft(var A: TArray<String>);
begin
Insert(A[0], A, Length(A));
Delete(A, 0, 1);
end;