Ich habe mal schnell eine kleine Klasse zusammengehackt, die intern eine sortierte Stringliste verwendet (allerdings ganz einfach über Sorted auf true, das dürfte also case-sensitive sein).
Delphi-Quellcode:
type
TWoerterbuch = class
strict private
FWoerter: TStringlist;
public
constructor Create;
destructor Destroy; override;
function Add(const Wort: string): integer;
procedure Clear;
procedure Delete(Index: integer);
procedure Filter(const Suchwort: string; FilterResult: TStrings);
end;
...
implementation
...
uses StrUtils;
{ TWoerterbuch }
function TWoerterbuch.Add(const Wort: string): integer;
begin
Result := FWoerter.Add(Wort);
end;
procedure TWoerterbuch.Clear;
begin
FWoerter.Clear;
end;
constructor TWoerterbuch.Create;
begin
inherited;
FWoerter := TStringlist.Create;
FWoerter.Sorted := true;
end;
procedure TWoerterbuch.Delete(Index: integer);
begin
FWoerter.Delete(Index);
end;
destructor TWoerterbuch.Destroy;
begin
FWoerter.Free;
inherited;
end;
procedure TWoerterbuch.Filter(const Suchwort: string; FilterResult: TStrings);
var
i: integer;
begin
Assert(Assigned(FilterResult));
FilterResult.BeginUpdate;
try
FilterResult.Clear;
for i := 0 to FWoerter.Count - 1 do
if (Suchwort = '') or AnsiStartsText(Suchwort, FWoerter[i]) then
FilterResult.Add(FWoerter[i]);
finally
FilterResult.EndUpdate;
end;
end;
Das ist natürlich die billigste Variante, läuft auf meinem Rechner allerdings erstaunlich performant (Athlon II X4 2,8 GHz, 2 GB
RAM).
@jandelph: Ich erwarte natürlich nicht, dass Du den Code verstehst, trotzdem kannst Du ihn ja einmal gedanklich nachvollziehen und zu unklaren Begriffen in der Hilfe nachlesen. Bei weiteren Fragen einfach fragen
[edit] Wobei mir einfällt: das Sorted kann man sich hier eigentlich auch sparen, da in dieser Variante sowieso die ganze Liste durchlaufen wird. Aber durch geschickte Abbruchbedingungen kann man das ja unterbinden, was die ganze Sache wohl enorm beschleunigen kann
[/edit]