![]() |
Delphi-Version: 10.3 Rio
Array Inhalt versetzen?
Hallo,
ich habe ein "a:TArray<String>". Gibt's da vielleicht irgendein Befehl, um den Inhalt nach links und rechts zu versetzen? Beispiel: a[0]:='Auto'; a[1]:='Fahrrad'; a[2]:='Flugzeug'; Ich möchte z.B. mit einer Prozedur "nachlinks(a)" oder "nachrechts(a)" erreichen, dass der Inhalt entsprechend neu gesetzt wird. Um ein Beispiel für "nachlinks(a)" zu geben. 1. Aufruf: a[0]:='Fahrrad'; a[1]:='Flugzeug'; a[2]:='Auto'; Nächster Aufruf: a[0]:='Flugzeug'; a[1]:='Auto'; a[2]:='Fahrrad'; Ich denke, so ist es verständlich, was ich meine. Das Array hat eine unterschiedliche Größe. Mal mehr Inhalt, mal weniger. Könnte mir vorstellen, dass es hierzu was spezielles für's Array gibt, ums einfach zu lösen. Gruß Micha |
AW: Array Inhalt versetzen?
Vielleicht so?
Delphi-Quellcode:
procedure Swap(var arr: array of string; A, B: Integer);
var Tmp: string; begin Tmp := Integer(arr[A]); arr[A]) := arr[B]; arr[B]) := Tmp; end; Swap(a, 0, 1); |
AW: Array Inhalt versetzen?
Dafür wäre eine TList<> deutlich besser geeignet:
Delphi-Quellcode:
Ergbenis:
var
a: TList<String>; // in diesem besonderen Fall gäbe es sogar TStringlist als eigenen Typen begin a[0]:='Auto'; a[1]:='Fahrrad'; a[2]:='Flugzeug'; a.Insert(0, a.Extract(2)); end; a[0]='Flugzeug'; a[1]='Auto'; a[2]='Fahrrad'; |
AW: Array Inhalt versetzen?
Zitat:
Delphi-Quellcode:
procedure Swap(var arr: array of string; A, B: Integer);
var Tmp: string; begin Tmp := arr[A]; arr[A]) := arr[B]; arr[B]) := Tmp; end; |
AW: Array Inhalt versetzen?
Das war einfach frei getippt und von irgendwoher noch kopiert. Klar ist das komplett falsch aber der Swap ansich sollte klar sein.
Wer A zwischenspeichern, A B zuweisen, B den zwischengespeicherten Wert zuweisen. Hab auch ehrlich gesagt nicht über die Typen nachgedacht. Ist mir auch egal, denn der Sinn sollte klar sein ;) |
AW: Array Inhalt versetzen?
Zitat:
|
AW: Array Inhalt versetzen?
Zitat:
Delphi-Quellcode:
SetLength(A, 3);
A[0] := 'Auto'; A[1] := 'Fahrrad'; A[2] := 'Flugzeug'; Insert(A[2], A, 1); Delete(A, 3, 1); |
AW: Array Inhalt versetzen?
Zitat:
|
AW: Array Inhalt versetzen?
Danke für die vielen Antworten.
Ich will es noch mit meinem "TArray<String>" probieren. Trotzdem Danke @Medium für die Info TList. Ich habe jetzt "nach links verschoben" getestet und es geht:
Code:
Die andere Richtung (nach rechts) habe ich so gemacht:
Insert(A[0], A, Length(A));
Delete(A,0,1); // oder auch so: SetLength(A,Length(A)+1); A[Length(A)-1] := A[0]; Delete(A,0,1);
Code:
* Verstehe ich nicht so ganz. Davor habe ich ja ein Delete. Also ich lösche den letzten Inhalt. Aber da wird wohl die Array-Länge nicht gekürzt. Wobei das mit dem obigen Code (nach links verschieben) dann geht. Dort habe ich kein "SetLength" nach dem "Delete". Auch geht der erste Code (nach links verschieben; der erste Teil) ganz ohne SetLength. Ein Code (nach rechts) ohne "SetLength" habe ich nicht hinbekommen. Wobei ich dachte, "Delete" kürz die Array-Länge und "Insert" macht die Array-Länge automatisch größer. Scheint aber wohl damit zusammenzuhängen, wo man etwas einfügt, sprich am Anfang oder am Ende.
SetLength(A,Length(A)+1);
Insert(A[Length(A)-1], A, 0); Delete(A,Length(A)-1,1); SetLength(A,Length(A)-1); // * Jedenfalls muss ich hier mit "Length" arbeiten, da das Array ja nicht immer nur 3 Inhalte hat. Kann auch al mehr sein. Aber dann nicht hundert/tausend... vielleicht max. bis 20. Getestet habe ich es gerade mit 9 Inhalten. |
AW: Array Inhalt versetzen?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz