Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zwei Stringlisten miteinander vergleichen. Wie am besten ? (https://www.delphipraxis.net/124574-zwei-stringlisten-miteinander-vergleichen-wie-am-besten.html)

HolgerCW 21. Nov 2008 09:21


Zwei Stringlisten miteinander vergleichen. Wie am besten ?
 
Hallo zuasmmen,

wie kann ich am besten zwei Stringlisten miteinander vergleichen ?

Gruss

Holger

nahpets 21. Nov 2008 09:35

Re: Zwei Stringlisten miteinander vergleichen. Wie am besten
 
Hallo,

von beiden 'ne MD5-Summe bilden, dann sind sie gleich oder nicht.

Oder brauchst Du Informationen über die Unterschiede?

Sortieren und zeilenweise vergleichen.

In 'ner Schleife durch die erste Liste gehen und mit IndexOf in der zweiten Suchen, wenn IndexOf > -1 in beiden Liste löschen, was über bleibt ist sind die Unterschiede.

DeddyH 21. Nov 2008 09:37

Re: Zwei Stringlisten miteinander vergleichen. Wie am besten
 
Für eine reine Gleichheitsabfrage müsste auch CompareMem() gehen.

HolgerCW 21. Nov 2008 09:43

Re: Zwei Stringlisten miteinander vergleichen. Wie am besten
 
Ich brauche beides. Als erstes wird geprüft ob der Count unterschiedlich ist. Dann baucht auch ncciht mehr verglichen werden. Wenn der Count gleich ist, muss der Inhalt noch verglichen werden. Wie baue ich so eine For-Schleife am besten auf (Performance) ?

Wie nutzt man CompareMem() ?

nahpets 21. Nov 2008 09:49

Re: Zwei Stringlisten miteinander vergleichen. Wie am besten
 
Zitat:

Zitat von DeddyH
Für eine reine Gleichheitsabfrage müsste auch CompareMem() gehen.

oder auch
Delphi-Quellcode:
if StringListe1.Text = StringListe2.Text then ShowMessage('Sindsichgleich')
Wie groß sind die Listen und was musst Du in Bezug auf Unterschied wissen?
Reicht es, wenn Du weißt, dass es einen Unterschied gibt oder musst Du die Unterschiede auflisten...
Ist die Reihenfolge von Bedeutung?
Wenn nein:
Delphi-Quellcode:
StringListe1.Sort;
StringListe2.Sort;
bSindgleich := True;
For i := 0 to StringListe1.Count - 1 Do Begin
  bSindGleich := StringListe1[i] = StringListe2[i];
  if not bSindGleich then break;
end;
Ist die Reihenfolge von Bedeutung, dann ohne Sort.

DeddyH 21. Nov 2008 09:50

Re: Zwei Stringlisten miteinander vergleichen. Wie am besten
 
Mal aus dem Hut:
Delphi-Quellcode:
Gleich := CompareMem(PChar(sl1.Text),PChar(sl2.Text),Length(sl1.Text));

HolgerCW 21. Nov 2008 09:52

Re: Zwei Stringlisten miteinander vergleichen. Wie am besten
 
Hi,

es geht um eine reine Abfrage ob der Inhalt gleich ist.

Beispiel: ST1 hat A,B,C und ST2 hat C,A,B -> sindgleich
Beispie2: ST1 hat A,B,C und ST2 hat A,B,D -> sind ungleich

Geht das mit CompareMem ?

taaktaak 21. Nov 2008 09:56

Re: Zwei Stringlisten miteinander vergleichen. Wie am besten
 
neeee

// edit: oder doch?! erst beide sortieren, dann CompareMem()

nahpets 21. Nov 2008 09:58

Re: Zwei Stringlisten miteinander vergleichen. Wie am besten
 
Zitat:

Zitat von DeddyH
Mal aus dem Hut:
Delphi-Quellcode:
Gleich := CompareMem(PChar(sl1.Text),PChar(sl2.Text),Length(sl1.Text));

Was ist, wenn die Zahl der Zeilen übereinstimmt, aber nicht Length(sl1.Text) und Length(sl2.Text)?
Sollte dann wohl vorher geprüft werden.

Also:
Delphi-Quellcode:
If sl1.Count <> sl2.Count then Exit;
If Length(sl1.Text) <> Length(sl2.Text) then Exit;
If sl1.Text <> sl2.Text Then Exit;
und dann in 'ner Schleife oder wirklich per MD5.

Wenn es um sowas wie in Deinem Beispiel geht, dann
Delphi-Quellcode:
sl1.Sort;
sl2.Sort;
if sl1.Text <> sl2.Text then // sind unterschiedlich

DeddyH 21. Nov 2008 10:00

Re: Zwei Stringlisten miteinander vergleichen. Wie am besten
 
Oder erst die Anzahl der jeweils enthaltenen Strings ermitteln und dann in einer Schleife mit IndexOf() vergleichen. Dies dürfte aber nicht die schnellste Methode sein.

[edit]
Zitat:

Zitat von naphets
Was ist, wenn die Zahl der Zeilen übereinstimmt, aber nicht Length(sl1.Text) und Length(sl2.Text)?

In dem Fall erübrigt sich ein weiterer Vergleich, oder? ;) Ich war davon ausgegangen, dass das bereits abgeprüft wurde. [/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:44 Uhr.
Seite 1 von 3  1 23      

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