![]() |
2 DynArrays zusammenfuegen
Hallo!
Wollt mal fragen wie man 2 dynamische Arrays mit dem Reißverschlussprinzip zusammenfuegt. :/ Hab mich selbst scho probiert, aber irgendwie komm ich noch nich ganz auf die Loesung. xD Achja, die beiden Arrays haben sehr wahrsch. verschiedene Groessen! Deshalb find ich des recht schwierig... Danke schonma fuer Antworten, Luca! |
Re: 2 DynArrays zusammenfuegen
Wie hast du es versucht? Such mal nach Mischen.
|
Re: 2 DynArrays zusammenfuegen
die Frage ist wie du außerhalb der Programmierung 2 mengen im Reisverschlussprinzip zusammenfügst.
Ich würde einmal aus der einen Kiste was nehmen, dann aus der anderen und das solange bis eine Kiste von beiden leer ist. Danach einfach die restlichen Sachen der noch befüllten Kiste hinten anfügen. In der Programmierung ist es nicht viel anders. Erstmal schauen wieviel Platz man braucht (Anzahl des einen Arrays + Anzahl des zweiten Arrays. Dann das kleinere Array von beiden durchgehen und die Elemente in jedes zweite Feld des neuen Arrays stopfen (Index * 2) Danach das größere Array nehmen und bis zur Anzahl des kleinen Arrays die lücken stopfen. Dahinter dann den Rest des größeren Arrays kopieren. |
Re: 2 DynArrays zusammenfuegen
versuchs mal so:
Delphi-Quellcode:
Gruß
setlength(array3,(length(array1)+length(array2)));
x := -1; for I := 0 to length(array1) - 1 do begin inc(x); array3[x] := array1[i]; if i <= length(array2)-1 then begin inc(x); array3[x] := array2[i]; end; end; if length(array2)> length(array1) then begin for I := length(array1)-1 to length(array2) - 1 do begin inc(x); array3[x] := array2[i]; end; end; Scooty |
Re: 2 DynArrays zusammenfuegen
auch will ... auch will ... *hibblig rumhüpf* :firejump:
Delphi-Quellcode:
und in Kurz:
SetLength(array3, Length(array1) + Length(array2));
z := Min(Length(array1), Length(array2)); x := 0; For i := 0 to z - 1 do Begin array3[x] := array1[i]; Inc(x); array3[x] := array2[i]; Inc(x); End; For i := z to High(array1) do Begin array3[x] := array1[i]; Inc(x); End; For i := z to High(array2) do Begin array3[x] := array2[i]; Inc(x); End;
Delphi-Quellcode:
SetLength(array3, Length(array1) + Length(array2));
z := Min(Length(array1), Length(array2)); For i := 0 to z - 1 do Begin array3[i * 2] := array1[i]; array3[i * 2 + 1] := array2[i]; End; For i := z to High(array1) do array3[z + i] := array1[i]; For i := z to High(array2) do array3[z + i] := array2[i]; |
Re: 2 DynArrays zusammenfuegen
-Unsinn-
|
Re: 2 DynArrays zusammenfuegen
Er will die Arrays nach dem Reißverschlussprinzip zusammenfügen, General.
|
Re: 2 DynArrays zusammenfuegen
@Neutral General:
auch wenn es hier nicht stimmt ... sobald bestimmte Struckturen in dem Array enthalten sind (er hat ja nicht gesagt von welchem Typ sein Array ist), dann kann es damit schöne Speicherprobleme geben versuch deinen z.B. mal mit Array of String :stupid: also davor sollte man bei sowas schon warnen :angel: |
Re: 2 DynArrays zusammenfuegen
Korrekt, is n Array vom Typ t_inhalt, un t_inhalt wiederum is als type definiert mit string^^
Delphi-Quellcode:
So, und da mir meine 'liebe' Mutter direkt nachdem ich die Frage geschrieben habe, den WLan-Stick abgenommen hat, musste ich selbst nachdenken. :/
type t_inhalt : string
Also 'n Blatt Papier genommen un des mal durchgegangen. ^^ Bin auf ne schicke Lösung ohne 3tes Array gekommen :D
Delphi-Quellcode:
Trotzdem danke an alle. ^___^
t := 1;
for i := 0 to high(schlange2.inhalt) do begin array_size(inc); for j := high(schlange.inhalt) downto t do schlange.inhalt[j] := schlange.inhalt[j-1]; schlange.inhalt[t] := schlange2.inhalt[i]; t := t+2; end; Greetz, Luca |
Re: 2 DynArrays zusammenfuegen
Also Strings sind Typen, welche initialisiert und finalisiert werden müssen, was bei Move/MoveMemory natürlich nicht der Fall ist.
Zitat:
und soweit ich das seh, sollte diese auch funktionieren :thumb: Zitat:
Delphi-Quellcode:
was man hier noch optimieren könnte, wäre das ständig weiterschieben alle nachfolgenden Einträge
for j := high(schlange.inhalt) downto t do
schlange.inhalt[j] := schlange.inhalt[j-1]; hier werden z.B. erstmal alle Einträge im array1 an ihre neue Position verschoben und anschließend nur noch die Einträge aus array2 in die entstandenen Freiräume eingefügt.
Delphi-Quellcode:
für das Verständnis:
a := Length(array1);
n := a + Length(array2); z := Min(a, Length(array2)); SetLength(array1, n); For i := a - 1 downto z do array1[z + i] := array1[i]; For i := z - 1 downto 1 do array1[i * 2] := array1[i]; For i := 0 to z - 1 do array1[i * 2 + 1] := array2[i]; For i := z to High(array2) do array1[z + i] := array2[i]; die 1. Schleife verschiebt alles, was zusammenhängend von array1 am Ende des gemeinsamen Arrays steht (falls vorhanden). die 2. Schleife verschiebt die Elemente im gemeinsamen Anteil. die 3. Schleife fügt die Elemente von array2 in den gemeinsamen Anteil. die 4. Schleife hängt die übrigen Teile an, welche nach dem gemeinsamen Teil liegen (falls vorhanden). im gemeinsamen Teil sind die Einträge dann nach dem Reisverschlußprinzip verteilt. |
Re: 2 DynArrays zusammenfuegen
Ich find meine Loesung irgendwie uebersichtlicher... xD"
Ach, FUCK! O_O Hab ganz vergessen, dass ich noch ne Ueberpruefung machen muss, welches Array groeßer is. -.- |
Re: 2 DynArrays zusammenfuegen
diese Prüfung ist bei mir überall schon drin :mrgreen:
(beim letzen Code wird immer array2 in array1 eingefügt) *guck* stümmt, bei dir wäre es schon besser. Nja, hab ja nicht gsagt, daß es unbedingt übersichtlicher ist, aber ich find soooooooooo unübersichtlich ist dann doch nicht. :angel2: Nur bei vielen Einträgen geht es so schneller und vom Speicherrumgeschaufle her, isses och optimaler :angel: Ansonsten ist deines, vom Prinzip her schon OK. |
Re: 2 DynArrays zusammenfuegen
Naja, ich sags mal so:
Ich lern seit 3(?) Monaten Delphi(schulisch) un mach grad die HA von 'nem Kumpel der in ne Klasse ueber mir is... :) Deshalb versteh ich dein Code vllt au einfach noch nich so gut ;D Ich hab bei mir jetz einfach ne if..then..else-Abfrage eingefuegt, den Misch-Code kopiert und dann angepasst.^^ Is zwar mehr Code-Volumen aber fuer mich (noch) verstaendlicher ;3 |
Re: 2 DynArrays zusammenfuegen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:53 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