![]() |
array verändern
Wie kann ich aus meinem Array B[1..24] in Abhängigkeit verschiedener Bedingungen bestimmte Elemente z.B. B[2] und B[4] entfernen, sodass sie beim Nachfolgenden Sortieren in der sortierten Liste nicht mehr auftauchen?
|
Re: array verändern
Bei statischen Arrays kannst Du keine Elemente entfernen.
|
Re: array verändern
Dann gibt es sicherlich so etwas wie dynamische...
|
Re: array verändern
Ich würde sowieso einen dynamischen verwenden, denn die Größe könnte sich schnell ändern
[Edit: Zitat:
} |
Re: array verändern
Jepp, die gibt es.
Delphi-Quellcode:
var
arr1: array[1..8] of integer; //statisches Array arr2: array of integer; //dynamisches Array, Größe muss über SetLength festgelegt werden |
Re: array verändern
Wie setze ich den SetLength fest?
Wie greife ich dann auf solche Feldvariablen zu: auch z.B. B[20], wenn das mit der festgelegten Länge korrespondiert? |
Re: array verändern
SetLength -> F1, Zugriff erfolgt wie bei einem statischen Array über Array[Index].
|
Re: array verändern
Die Hilfe spuckt doch nur "Müll" aus, fast unabhängig davon was ich suche bzw. eingebe(Natürlich sthet das im Zusammenhang mit meinem beschränkten Wissen zu Delphi)!
Vielleciht kann mir jemand mal aufzeigen wie diese Length festgesetzt wird und vor allem wo! Im übrigen wie lösche ich nun eigentlich ein "Objekt" aus dem array of integer, z.B. B[12]? |
Re: array verändern
Z.B. mit dem letzen Element Tauschen und dann den Array um eins verkleinern
|
Re: array verändern
Also ich finde die Hilfe extrem hilfreich (wie sinnig).
Suche einfach in der Hilfe nach der Routine "SetLength" und damit bekommst du eine genaue Beschreibung, wie diese funktioniert. Im Prinzip ist allerdings schon der Name selbstredend, oder kannst du kein Englisch? Wo du die Länge festlegst und wie oft du diese änderst ist deine Sache, das musst du schon selbst entscheiden. Hier kennt ja schließlich niemand deinen Code. Einfach Löschen ist nicht drin. Löschen besteht z.B. aus folgenden Schritten: 1. Die Elemente NACH dem zu löschenden Element um eine Position nach vorne verschieben (ja, damit überschreibst du das Element, das du löschen willst) 2. Das Array mit Hilfe von SetLength um ein Element verkürzen. Nur zur Vollständigkeit: Objekte sind was anderes. Ein Array of Integer enthält einfach Elemente vom Typ Integer und keine Objekte. Edit: Wie es mkinzler geschrieben hat geht es natürlich auch. Wenn du sowieso danach sortierst, dann ist die Reihenfolge ja wurscht. |
Re: array verändern
Kann ich dann so vorgehen?
Delphi-Quellcode:
if a=1 then begin swap(B[19], B[24]) and setlength(B, 23);
{etc} |
Re: array verändern
Nein
Delphi-Quellcode:
end;
if a=1 then
begin swap(B[19], B[24]); setlength(B, 23); |
Re: array verändern
Ich habe es jetzt so geschrieben:
Delphi-Quellcode:
Es klappt noch nicht ganz!
if edit55.Visible = true then
begin swap(B[19],B[24]); swap(B[13],B[23]); swap(B[7], B[22]); swap(B[1], B[21]);{hier liegt irgendein Problem} setlength(B, 20); end; if edit56.Visible = true then begin {usw} |
Re: array verändern
Delphi-Quellcode:
reicht.
if edit55.Visible then ...
Was meinst du mit Problem? |
Re: array verändern
Wieso tauschst Du die Elemente manuell und welches Problem? Ohne Infos kommen wir nicht weiter.
|
Re: array verändern
In Bezug auf die "problematische" Zeile sagt Delphi ")" erwartet aber "," gefunden!
|
Re: array verändern
Zeig uns mal die ganze Methode.
|
Re: array verändern
Delphi-Quellcode:
Mehr ist es nicht! Warum ich das manuell mache, weil ich keine Ahnung habe, wie man es anders anstellen könnte!
if edit55.Visible then
begin swap(B[19],B[24]); swap(B[13],B[23]); swap(B[7], B[22]); swap(B[1], B[21]); setlength(B, 20); end; if edit56.Visible then begin swap(B[19],B[24]); swap(B[13],B[23]); swap(B[7], B[22]); swap(B[1], B[21]); setlength(B, 20); |
Re: array verändern
Ich vertehe auch nicht, was der Code machen soll.
|
Re: array verändern
Zitat:
Die Funktion macht 100 pro nicht das was du möchtest. |
Re: array verändern
Ja das glaube ich inzwischen auch, aber wie schaffe ich es denn, dass mir das Programm z.B. B[24] mit B[15] austauscht?
Ich dachte immer diese Funktion heißt swap?!? |
Re: array verändern
Delphi-Quellcode:
Wenn du es wirklich AUSTAUSCHEN möchtest, dann speicherst du den Wert in [5] erst in eine Temporäre Variable!
BlaArr[5]:=BlaArr[21];
SetLength(BlaArr,21) |
Re: array verändern
was soll "blaarr" sein? Ich möchte das Element B[19] löschen, deshlab möchte ich diesen Wert mit dem letzten B[24] tauschen um dann die Länge des Feldes auf 23 zu reduzieren![Dann ist es ja verschwunden] Wie war das nochmal mit den temporären Varibalen?
|
Re: array verändern
Zitat:
|
Re: array verändern
Wie würde denn der für mein Beispiel aussehen? Hat doch diesmal nichts mit BubbleSort zu tun oder?
|
Re: array verändern
Irgendwie schon, weil der BubbleSort Vertauschen als wichtigstes Mittel verwendet. Wenn der 1. Wert kelienr als der 2. ist wird getauscht. Und das vom Ende her, deshalb werden die größeren Werte wie Blasen im Wasser nach oben geschoben. daher der Name
|
Re: array verändern
Delphi-Quellcode:
Diese Prozedur habe ich vorhin verwendet! Was muss ich daran jetzt verändern?
swp:=xx;
xx:=yy; yy:=swp; |
Re: array verändern
Nichts. Er vertauscht xx und yy.
|
Re: array verändern
Wenn ich nun B[19] und B[24] vertauschen will heißt dass:
Delphi-Quellcode:
B[19]:=xx;
xx:=yy; yy:=B[19]{B[24]????]; |
Re: array verändern
Nein,
Delphi-Quellcode:
Aber zum Löschen ist das ja nicht notwendig, weil B{2 anschliessend ja entfernt wird, es reichet also bei nicht sortiertem Array
h := B[19];
B[19] := B[24]; B[24] := h;
Delphi-Quellcode:
B[19] := B[24];
|
Re: array verändern
:shock: Was ich übrigens in #22 bereits (wahrscheinlich zu chiffriert im weiteren Sinne) "erwähnt" habe :roll:
|
Re: array verändern
Fast alles wurde hier schon mehrmals erwähnt, z.T. im Parallelthread
![]() |
Re: array verändern
Den hat ich auch grad erst entdeckt ... naja, manche brauchen sowas :roll:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:39 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-2025 by Thomas Breitkreuz