AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Performanteste Möglichkeit zur Prüfung ob zwei StringListen den gleichen Inhalt haben

Performanteste Möglichkeit zur Prüfung ob zwei StringListen den gleichen Inhalt haben

Ein Thema von CodeX · begonnen am 23. Feb 2017 · letzter Beitrag vom 28. Feb 2017
Antwort Antwort
Seite 2 von 2     12
freimatz

Registriert seit: 20. Mai 2010
1.378 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: Performanteste Möglichkeit zur Prüfung ob zwei StringListen den gleichen Inhalt h

  Alt 28. Feb 2017, 09:44
Ja genau. Die Möglichkeit ist die schnellste.
...
Solange niemand einen performanteren Gegenvorschlag zu einer Schleife hat, ...
Dazu müsstest du erst mehr Hintergrundinformationen liefern.
  Mit Zitat antworten Zitat
MichaelT

Registriert seit: 14. Sep 2005
Ort: 4020 Linz
532 Beiträge
 
Delphi 10.3 Rio
 
#12

AW: Performanteste Möglichkeit zur Prüfung ob zwei StringListen den gleichen Inhalt h

  Alt 28. Feb 2017, 10:14
Erst wenn der Count gleich ist, dann den Vergleich machen. Das hilft aber allein unter der Annahme, dass Leerzeilen in beiden Listen gewollt an der selben Stelle auftreten.

Du kannst auch zuerst mal ein Zeichen prüfen und falls die gleich sind den ganzen String und/oder die Länge usw... Wenn du erwartest, dass die Listen gleich sind und der Items.Count ident bringt das wenig.


Ich habe viele Threads zu dem Thema gefunden, wie man Unterschiede von StringListen herausfindet. Meine Frage hat aber einen anderen Fokus.

Wie prüfe ich am performantesten, ob zwei StringListen (TStrings) die gleichen Strings in der gleichen Reihenfolge enthalten? Eigenschaften wie Delimiter o.ä. spielen dabei keine Rolle und könnten entsprechend unterschiedlich sein.

Eine Liste kann schon mal bis zu 10.000 Strings enthalten.

Mir fallen mehrere Möglichkeiten ein, wie das ganz einfach geht (z.B. Werte in einer Schleife durchgehen und vergleichen oder DelimitedText vergleichen). Aber wäre die performanteste Methode?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.169 Beiträge
 
Delphi 10.4 Sydney
 
#13

AW: Performanteste Möglichkeit zur Prüfung ob zwei StringListen den gleichen Inhalt h

  Alt 28. Feb 2017, 10:24
Wieso nimmt man nicht einfach die Equals-Methode?

Bis auf die Prüfung ob man nicht die gleichen Instanzen vergleicht ist diese schon sehr schnell.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#14

AW: Performanteste Möglichkeit zur Prüfung ob zwei StringListen den gleichen Inhalt h

  Alt 28. Feb 2017, 10:29
Du solltest vielleicht mal ausrechnen, wie schnell du aktuell bist.
Also du musst ja beide Listen komplett aud dem RAM in die CPU schaufeln, das heißt irgendwann kommst du da an das Limit von der Geschwindigkeit des RAM.
Wenn die Lösung aus #9 da in die Nähe kommt, ist da eigentlich nicht viel zu verbessern.

Falls sie es nicht tut, und es noch schneller gehe soll, müsstest du wohl auf assembler gehen und mit SSE-Anweisungen mehrere Bytes auf einmal vergleichen.

Alternativ könntest du probieren, ein paar Durchläufe der Schleife zusammenzufassen. In etwa so:
Delphi-Quellcode:
var
  i: Integer;
  maxi: Integer;
begin
  Result := sl1.Count = sl2.Count;
  i := 0;
  maxi = (sl1.Count div 4) * 4;

  while Result and (i < maxi) do
  begin
    Result := Result or (sl1[i+0] = sl2[i+0]);
    Result := Result or (sl1[i+1] = sl2[i+1]);
    Result := Result or (sl1[i+2] = sl2[i+2]);
    Result := Result or (sl1[i+3] = sl2[i+3]);
    Inc(i, 4);
  end;
  
  while Result and (i < sl1.Count) do
  begin
    Result := sl1[i] = sl2[i];
    Inc(i);
  end;
end;
Keine Ahnung, ob der Compiler soetwas inzwischen automatisch macht, aber das könnte noch ein paar Prozent Unterschied bringen.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:05 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