Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Wort in Liste vorhanden (https://www.delphipraxis.net/75912-wort-liste-vorhanden.html)

arbu man 27. Aug 2006 08:59


Wort in Liste vorhanden
 
Hi,

Ich habe eine Liste? mit etwa 88.000 Einträgen, jeder Eintrag ist ein Wort. Nun suche ich nach einer sehr schnellen möglichkeit zu überprüfen ob ein Wort in dieser Liste ist oder nicht. Mir geht es nur um ein ob, nicht wo ein wo.
Z.Z verwende ich dazu eine TStringList aber die ist mir zulangsam. Gibt es da eine schnellere Lösung ?

mfg, Björn

Hawkeye219 27. Aug 2006 09:06

Re: Wort in Liste vorhanden
 
Hallo Björn,

wenn die Stringliste sortiert ist (Delphi-Referenz durchsuchenTStringList.Sorted), sollte es mit Delphi-Referenz durchsuchenTStringList.IndexOf eigentlich recht schnell gehen.

Gruß Hawkeye

3_of_8 27. Aug 2006 09:10

Re: Wort in Liste vorhanden
 
Wenn sie sorted ist, könntest du mit binärer Suche drüberlaufen. Kann allerdings sein, dass TStringList das sowieso macht, wenn sie sorted ist.

Elvis 27. Aug 2006 09:11

Re: Wort in Liste vorhanden
 
Da muss ich mich doch fragen, wie du gesucht hast.
Vor allem für jemanden, der Antworten wie meine hier seit fast 2 Jahren und fast 700 Beiträgen bekommt. ;)
Mein erster Versuch mit einer so stumpfsinnigen Suchanfrage wie Hier im Forum suchenstrings schnell suchen brachte schon was du suchst. ("Große Strings schnell auf Inhalt einer Zeichenkette prüfen?")

Nachtrag:
@Hawkeye, eine StringLit muss tatsächlich suchen, eine sortierte StringList muss immer noch (binär) suchen und dann auch noch sortiert einfügen.
Ein Dictionary muss nur den CRC einens Key generieren und kann dir direkt sagen, ob der Key drin ist oder nicht. Ohne zu suchen.
Mit Delphi Boardmitteln hättest du sicherlich Recht, aber Alzhaimers Klassen bringen keine Abhängigkeiten auf andere Komponenten mit. :)

Hawkeye219 27. Aug 2006 09:47

Re: Wort in Liste vorhanden
 
Hallo Elvis,

ich habe natürlich zunächst versucht, zu einem Bordmittel zu greifen. Ohne genauere Informationen von Björn können wir nur raten, ob die die Suchgeschwindigkeit ausreichend ist. Der Knackpunkt wird der Aufbau der Liste sein. Wird sie im Lauf der Verarbeitung ständig erweitert, ist die Stringliste nicht mehr das geeignete Medium zum Speichern (und Suchen) der Daten. In diesem Fall sollte man auf das von dir genannte Dictionary ausweichen. Ich wollte mir die Klassen schon immer mal genauer angesehen, habe es aber bisher versäumt. Danke für den "Push"!

Zitat:

Zitat von Elvis
Alzhaimers Klassen

Ich hoffe, du bist schnell. alzaimar dürfte bereits einen geeigneten Faustkeil suchen. :mrgreen:

Gruß Hawkeye

robinWie 27. Aug 2006 09:55

Re: Wort in Liste vorhanden
 
was Genau ist ein Dictionary?
Und wie verwendet man das?

Elvis 27. Aug 2006 10:00

Re: Wort in Liste vorhanden
 
Zitat:

Zitat von robinWie
was Genau ist ein Dictionary?
Und wie verwendet man das?

Ich würde sagen du folgst dem Suchlink und klickst auf en Thread, den ich oben erwähnt habe. Dort hat es Alzhaimar Himitsu erklärt. ;)
Aber es scheint dich ja nicht wirklich zu interessieren, sonst hättest du das schon alleine gemacht... :?

Der_Unwissende 27. Aug 2006 10:21

Re: Wort in Liste vorhanden
 
Hi,
nebenbei bemerkt ist die THashedStringList i.d.R. um einiges schneller als die TStringList (und ein VCL eigenes Mittel). In wirklich großen Listen fällt die aber (soweit ich mich richtig erinner) irgendwann auch deutlich hinter alzaimars Klassen zurück (der hatte glaube ich mal irgendwo einen Vergleich gehabt).

Gruß Der Unwissende

arbu man 30. Aug 2006 21:21

Re: Wort in Liste vorhanden
 
Danke für eure Antworten :thumb:
Werde erstmal eine sortierte THashedStringList nehmen.

Zitat:

Zitat von Elvis
Da muss ich mich doch fragen, wie du gesucht hast.
Vor allem für jemanden, der Antworten wie meine hier seit fast 2 Jahren und fast 700 Beiträgen bekommt. ;)
Mein erster Versuch mit einer so stumpfsinnigen Suchanfrage wie Hier im Forum suchenstrings schnell suchen brachte schon was du suchst. ("Große Strings schnell auf Inhalt einer Zeichenkette prüfen?")

Ich hatte falsch gesucht nach Eintrag und Liste


Alle Zeitangaben in WEZ +1. Es ist jetzt 19: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