Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi integer arrays vergleichen (https://www.delphipraxis.net/4469-integer-arrays-vergleichen.html)

Grumble 30. Apr 2003 13:10


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:

Christian S. 30. Apr 2003 13:21

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?

Grumble 30. Apr 2003 14:37

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:

Christian S. 30. Apr 2003 15:04

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:
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;
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.

MfG,
Peter

[edit=daniel B]Delphi-Tags ergänzt. MfG Daniel B.[/edit]

Grumble 30. Apr 2003 15:14

vielen dank, ich werd das mal ausprobieren :)

gruesse
Grumble
:coder:

ssach 5. Mai 2003 18:08

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

Christian S. 5. Mai 2003 18:25

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

nailor 5. Mai 2003 20:23

Oft verschmäht und eigentlich überflüssig, aber wie geschaffen für solche Operationen: SETS!!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:59 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz