![]() |
Arrays kopieren mit Hindernissen
Hallo nochmal +g+
Also ich habs geschafft die Arrays zu sortieren und auf Doppelte zu untersuchen +freu+ Ok jetzt zum nächsten Problem, ich will das eine Array in das andere kopieren.
Code:
Es wird zwar kopiert aber nicht alles. Nämlich die letzte Zahl bleibt immer weg. Soll heißen 5 Zahlen im ersten, 4 Zahlen im zweiten Array. Und nu????
for i:=0 to High(List1) do
begin List2[i]:=List1[i]; end; MfG KeeN |
Geht das nicht:
Code:
Vorraussetzung ist allerdings, dass die Arrays gleich groß sind.
List2 := List1;
Oder irgenmdwie mit move oder so? |
Arrays kopieren
Also das mit
Zitat:
Code:
+sfz+ ich verzweifel nochma ... +g+
for i:=0 to High(List1) do
begin move(List1, List2, i) end; |
Moin Keen,
wie ist denn List1 deklariert? |
aaaaalso
Deklaration:
Code:
Und da das ganze zwei dynamische Arrays sind...
list1: array of integer;
list2: array of integer;
Code:
SetLength(List1, strtoint(edit1.text));
SetLength(List2, strtoint(edit1.text)); |
Moin Keen,
also das versteh' ich jetzt aber nicht. High(List1) ist ja gleich Length(List1)-1, müsste also in Deinem Beispiel = 4 sein. Lass Dir doch vor der Schleife mal anzeigen, welchen Wert High(List1) hat. Wenn da 4 steht, und es trotzdem nicht funktioniert... *VorerstMalSchulterZuck* |
Hab ich gemacht kommt bei jedem 4 raus. Egal bei welcher Liste. Irgendwie blick ich net ganz durch +g+ shi* muss ich morgen mal die Leutz bei uns Fragen ... ich hoff ich find die Lösung. Ich hab übrigens auch schon probiert den letzten Wert "manuell" zu kopieren, aber nada.
KeeN |
Da du schon dynamische Arrays einsetzt, kannst du auch gleich die Erweiterte Copy Funktion nutzen:
Delphi-Quellcode:
Ein Setzen der Länge von List2 ist nicht nötig, da es sonst doppelt gemacht würde.
List2 := Copy(List1);
|
Naja wär ja ganz nett, wenns funktionieren würde. Aber es kommt immer die Fehlermeldung "Incompatible Types" ich frag mich aber warum, denn es sind ja beides Integer-Arrays ...
|
Hallo,
dann erstelle doch vorher einfach einen Typ:
Delphi-Quellcode:
Und nun deklariere Deine beiden Variablen als Typ 'tmyIntArray'. Ich sitz' nun gerade im Büro und kann es deswegen nicht länger austesten, aber ich denke, dass sollte Deine Typ-Probleme beheben. (Nur Figurprobleme -sofern vorhanden- löst dieser Tipp natüplich nicht... :mrgreen:)
type
tmyIntArray : Array of Integer; Grinse-Michel korrigiert - Luckie |
Hallo KeeN!
Die inkompatiblen Tpyen kommen daher: Zitat:
Lösung: entweder, wie schon vorgeschlagen, einen Typ deklarieren, oder:
Code:
Dann ist der Typ gleich!
list1, list2: array of integer;
Klingt komisch, ist aber so in der Hilfe beschrieben! Gruß Dietmar Brüggendiek |
+muah+ ich kriech die krise! das funktioniert zwar jetzt mit copy aber der macht trotzdem wieder nur 4 von 5 zahlen... :freak: :wall:
|
Hallo KeeN!
Ich habe das gerade bei mir (D5 Standard) mal ausprobiert - keine Probleme (mit meiner Deklaration in einem Durchgang). Bist Du sicher, daß Dein Ausgangsfeld Länge 5 ist und alle 5 Werte belegt hat??? @Christian Seehase: Length(dynArray) ist immer 4 (weil ein Pointer)!! Gruß Dietmar Brüggendiek |
ja bin ich. also ich hab zwei listboxen. listbox1 gibt die in array1 (list1) generierten zufallszahlen aus. und das sind 5. listbox2 gibt die dinger sortiert aus. und da sind es immer nur 4. ich hab auch schon probiert list1 in list2 zu kopieren und dann in listbox2 auszugeben, das gleich ergebnis ... wieder nur 4.
KeeN |
Hallo nochmal!
Zitat:
Dynamische Arrays sind (wie Strings) Pointer. Mit Deiner Zuweisung werden beide Pointer auf dasselbe Array gesetzt - und dazu muß List2 nicht einmal initialisiert sein!!! Es bleibt allerdings dabei, daß ich das hier vorhandene Problem nicht nachvollziehen kann. Die einzig mögliche Ursache ist, daß List1 4 statt 5 Elemente hat. Mein Testcode, ganz schnell zusammengeklopft:
Code:
Da enthalten beide Felder dann dieselben 5 Werte.
var a,b:array of integer;
p:byte; begin setlength(a, 5); setlength(b, 5); for p:=0 to High (a) do begin a[p]:=random (100); end; for p:=0 to High (a) do begin b[p] := a[p]; end; end; Gruß Dietmar Brüggendiek |
+hihi+ bei mir leider nicht. ich glaub langsam das liegt am kylix ich werd mich mal nach nem update umtun ...
danke trotzdem KeeN |
Zitat:
|
Moin Keen,
lass' doch mal in der Schleife einen Zähler mitlaufen, und gebe dessen Wert nach Beendigung der Schleife aus, oder vielleicht sogar immer in der Schleife zusammen mit den jeweiligen Werten. Das einzige was mir sonst noch einfällt: Wenn List2 die Werte sortiert enthält: Wie sortierst Du? Ist es im Bereich des Möglichen, dass Du in List2 nur deshalb nur vier Werte stehen hast, weil zwei der Werte in List1 gleich sind, und doppelte Werte bei Deinem Algo aussortiert werden? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:13 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