AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Array Inhalt versetzen?

Ein Thema von MicMic · begonnen am 7. Mai 2020 · letzter Beitrag vom 10. Mai 2020
Antwort Antwort
Seite 1 von 3  1 23   
MicMic

Registriert seit: 26. Mai 2018
254 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

Array Inhalt versetzen?

  Alt 7. Mai 2020, 20:31
Delphi-Version: 10.3 Rio
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
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
1.619 Beiträge
 
#2

AW: Array Inhalt versetzen?

  Alt 7. Mai 2020, 20:51
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);
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.602 Beiträge
 
Delphi 2007 Enterprise
 
#3

AW: Array Inhalt versetzen?

  Alt 7. Mai 2020, 21:04
Dafür wäre eine TList<> deutlich besser geeignet:

Delphi-Quellcode:
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;
Ergbenis:
a[0]='Flugzeug';
a[1]='Auto';
a[2]='Fahrrad';
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
830 Beiträge
 
#4

AW: Array Inhalt versetzen?

  Alt 7. Mai 2020, 22:30
Vielleicht so?

Delphi-Quellcode:
procedure Swap(var arr: array of string; A, B: Integer);
var
 Tmp: string; //<--String deklariert
begin
 Tmp := Integer(arr[A]); //<--nach Integer gecastet
 arr[A]) := arr[B];
 arr[B]) := Tmp;
end;

Swap(a, 0, 1);
Hm...ich denke so funktioniert das besser:
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;
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
1.619 Beiträge
 
#5

AW: Array Inhalt versetzen?

  Alt 7. Mai 2020, 23:02
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
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
7.751 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Array Inhalt versetzen?

  Alt 8. Mai 2020, 08:20
Wer A zwischenspeichern, A B zuweisen, B den zwischengespeicherten Wert zuweisen.
Ist halt nicht so einfach auf variable Arraylängen anpassbar.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
36.075 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Array Inhalt versetzen?

  Alt 8. Mai 2020, 08:46
in diesem besonderen Fall gäbe es sogar TStringlist als eigenen Typen
Auch Insert und Delete funktionieren nun endlich auch mit Arrays. (auch wenn CodeInsight das schon seit Jahrzehnten behauptete es aber nie funktionierte)

Delphi-Quellcode:
SetLength(A, 3);
A[0] := 'Auto';
A[1] := 'Fahrrad';
A[2] := 'Flugzeug';

Insert(A[2], A, 1);
Delete(A, 3, 1);
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
830 Beiträge
 
#8

AW: Array Inhalt versetzen?

  Alt 8. Mai 2020, 12:57
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
Och...das war mir klar. Nur macht ihr das bei mir auch immer, wenn ich mal irgendwo auf die schnelle bei sowas eine Typen verwürfele. Da dachte ich mir, ich kann das ja auch mal machen
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
MicMic

Registriert seit: 26. Mai 2018
254 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#9

AW: Array Inhalt versetzen?

  Alt 8. Mai 2020, 14:19
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:
 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);
Die andere Richtung (nach rechts) habe ich so gemacht:
Code:
 SetLength(A,Length(A)+1);
 Insert(A[Length(A)-1], A, 0);
 Delete(A,Length(A)-1,1);
 SetLength(A,Length(A)-1); // *
* 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.

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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
36.075 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Array Inhalt versetzen?

  Alt 8. Mai 2020, 15:36
* Verstehe ich nicht so ganz.
Du machst da auch am Anfang ein SetLength+1, also ist am Ende natürlich auch ein SetLength-1 nötig, oder du lässt die SetLength in diesem Fall komplett weg.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf