![]() |
integer arrays vergleichen
hallo,
ich hab da n prob, ich habe 2 arrays mit integer werten, nun moechte ich die einzelnen werte beider vergleichen (es gibt gleiche werte in beiden arrays) und die unterschiedlichen werte in ein drittes array speichern, ich bekomm das irgendwie nich hin, hab wohl grad ne denkblockade :shock: gruss Grumble :coder: |
Möchtest Du die einzelnen Elemente der Arrays vergleichen (also: stimmt a[i] mit b[i] überein?) oder möchtest Du wissen, ob ein Element aus Array a überhaupt irgendwo in Array b vorkommt?
|
also es ist so, dass im ersten array sagen wir 6 ungleiche werte stehen und 2 beliebige davon stehen im zweiten array, ich moechte jetzt die gegenmenge also die 4 restlichen werte ins dritte array speichern.
sorry dass die antwort so lange gedauert hat aber meine netzverbindung hakt heute irgendwie Grumble :coder: |
Die Sofort-Lösung, die sicherlich sehr langsam ist, aber funktioniert:
Ich gehe von Arrays aus, bei denen die Reihenfolge nicht wichtig ist!
Delphi-Quellcode:
Nochmal zum "unsortiert": wenn Du ein sortiertest Array hast, musst Du bei der im Quelltext markierten Zeile anders vorgehen, um c[i] zu löschen. Dann musst Du alle nachfolgenden Einträge um eins nach vorne verschieben. Wenn Du erwartest, viele Einträge löschen zu müssen, ist es wahrscheinlich besser, wenn Du zuerst wie bei einem unsortierten Array vorgehst und das Array hinterher neu sortierst.
VAR a, b, c : Array of Integer;
i, k : Integer; begin //a ist in Deinem Bsp das Array mit den 6 Werten //b ist in Deinem Bsp das Array mit den 2 auch in a enthaltenen Werten //C ist a ohne die in b enthaltenen Werten c:=Copy(a); for i:=High(c) Downto 0 Do begin k:=0; while (b[k] <> c[i]) and (k<High(b)) do inc(k); if b[k] = c[i] then begin c[i]:=c[High(c)]; //Hier brauchst Du das "unsortiert", das ich vorausgesetzt habe. SetLength(c,Length(c)-1); end; end; end; MfG, Peter [edit=daniel B]Delphi-Tags ergänzt. MfG Daniel B.[/edit] |
vielen dank, ich werd das mal ausprobieren :)
gruesse Grumble :coder: |
hy,
glaube dies ist die einfachste loesung, hab irgendwo auf meinem pc noch ein aelteres probramm liegen wo ich eine ahnliche funktion benutzt habe, also falls du probleme hast schreib und ich schaue mal ob ichs wiederfinde! cu |
Hi!
Mich würde die alternative Funktion schon interessieren. Ich wüsste gerne, ob es da noch was schnelleres gibt, als das, was ich gepostet habe. MfG, Peter |
Oft verschmäht und eigentlich überflüssig, aber wie geschaffen für solche Operationen: SETS!!!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:19 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