Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Arbeiten mit dynamischen Arrays
asbito - Fr 12.02.10 13:49
Titel: Arbeiten mit dynamischen Arrays
Hi leute ich habe einige dynamische arrays erstellt und nun will ich damit arbeiten, wie man die länge verändert, weiss ich und auch wie man diese herraus bekommt.
Aber gibt es eine möglichkeit mit vorgefertigten funktionen mit denen ich elemente verschieben oder löschen kann?
lg asbito
F34r0fTh3D4rk - Fr 12.02.10 14:24
Diese Funktionen wirst du dir wohl selbst schreiben müssen, aber das ist ganz einfach.
Löschen ginge zum Beispiel irgendwie so (ungetestet):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| var index: integer; begin for i := index to length(arr)-2 arr[i] := arr[i+1]; setlength(arr, length(arr)-1); end; |
Hier sieht man auch den Nachteil von Arrays gegenüber listen, da du hier immerhin eine Laufzeit von O(n) hast, wohingegen das Löschen bei Listen in konstanter Laufzeit funktioniert, wenn man das zu löschende Element kennt und nicht danach suchen muss.
asbito - Fr 12.02.10 14:39
Hey ok danke. ich werds so machen :)
lg asbito.
Jakob_Ullmann - Fr 12.02.10 15:02
Hallo!
Verschieben wirst du mit Hand machen müssen, jedenfalls kenne ich keinen Befehl, der dir das abnimmt. Ist aber auch nicht schwer. Sollte auch mit Assembler am speichereffizientesten gehen, aber du kannst im Prinzip, wenns einfach sein soll, ganz einfach mit einem dynamischen Hilfsarray arbeiten.
BenBE - Sa 13.02.10 03:43
Wenn man sich mit Pointern etwas angefreundet hat, geht das Verschieben von Einträgen mit Move recht einfach, solange der verschobene Eintrag von keinem Finalisierung-benötigenden Typ ist.
Für's Löschen gibt es mehrere Möglichkeiten, abhängig davon, ob die Reihenfolge der Elemente nach dem Löschen wichtig ist.
F34r0fTh3D4rk - Sa 13.02.10 22:16
Wenn die Reihenfolge egal ist, geht löschen auch so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| var index: integer; begin ...; arr[index] := arr[high(arr)]; setlength(arr, length(arr)-1); end; |
ffgorcky - Sa 27.02.10 21:06
Und das verschieben müsste ja dann so gehen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| procedure Verschieben(vonIndex, nachIndex:integer) var zwischenSpeicher:string; i:integer; begin if von<nach then begin for i:=von to nach-1 do begin zwischenSpeicher:=deinArray[i+1]; deinArray[i+1]:=deinArray[i]; deinArray[i]:=zwischenSpeicher; end; end else begin for i:=von downto nach+1 do begin zwischenSpeicher:=deinArray[i-1]; deinArray[i-1]:=deinArray[i]; deinArray[i]:=zwischenSpeicher; end; end; |
Ich hoffe, ich erzähle hier keinen "Stuss", aber wenn Du das wirklich einzeln auf- oder absteigen lassen möchtest wäre es so möglich.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!