Wertevergleich zweier Listen dauert sehr lange
Hallo zusammen,
ich habe folgendes Problem. Ich habe 2 Textdateien, ca. 7 Mb groß. Nun muss ich Werte von Textdatei 2 mit Werten aus Textdatei 1 vergleichen. Dazu habe ich zur Zeit 2 For-Schleifen. Inhalt Datei 1: IchBinEinWert1:IchBinAuchEinWert1 IchBinEinWert2:IchBinAuchEinWert2 ... Inhalt Datei 2: IchBinAuchEinWert1:IchBinEinWert3 IchBinAuchEinWert2:IchBinEinWert4 ... Nun soll aus Datei 1 "IchBinAuchEinWert1" in Datei 2 gesucht werden und mir dann "IchBinEinWert3" zurückgegeben werden. Das mache ich zur Zeit mit zwei For-Schleifen. Doch so wird für jeden Wert aus Datei 1 die komplette Datei 2 durchsucht. Wenn der Eintrag gefunden wurde, stoppt dieser Durchlauf (zur Optimierung). Trotzdem dauert das sehr sehr lange bei 7Mb Dateien. Könnt ihr mir sagen, wie ich den Vorgang beschleunigen kann? Ich werde sonst noch Threads einbauen. |
AW: Wertevergleich zweier Listen dauert sehr lange
Lade doch beide Dateien in ein TDictionary<string,string>. Erstens ist dann immer alles im Hauptspeicher (die paar MB) und zweitens ist das Lookup im Dictionary potentiell schneller.
|
AW: Wertevergleich zweier Listen dauert sehr lange
Ich würde die beiden Dateien jeweils in ein Dictionary lesen. Der Wert vor dem Doppelpunkt wäre dann mein Key und der Wert nach dem Doppelpunkt die Value. Danach müßte ich nur noch die KeyList des ersten Dictionaries durchlaufen und mit den Keys die Werte aus dem zweiten Dictionary auslesen.
Somit müssen die Werte jeder Datei nur noch einmal durchlaufen werden. Nachteil ist dass die Reihenfolge verlorengeht. Das könnte man aber auch lösen indem man zusätzlich noch eine Liste der Keys in ihrer Originalreihenfolge anlegt. |
AW: Wertevergleich zweier Listen dauert sehr lange
Zitat:
|
AW: Wertevergleich zweier Listen dauert sehr lange
Zitat:
Man könnte vielleicht noch von einem quadratischen Speedup sprechen, wenn die beiden Dateien immer ungefähr gleich groß sind. Präzise Begriffe für präzises Denken :stupid: |
AW: Wertevergleich zweier Listen dauert sehr lange
Falls Du alles "von Hand" machen willst:
sortiere Liste2 und suche die Werte von Liste1 mit der Binären Suche in Liste2. Das sollte akzeptabel schnell sein. Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:27 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