a) In einer sortierten Liste wird ein schnellerer Algorithmus zum Suchen verwendet.
b) Das Object-Property kann man schön für einen Integer verwenden, anstatt hier ständig die Strings/Zeilen für den Value-Zugriff zerlegen zu müssen. (Value und Name wird in nur einem String verwaltet und bei solchen Zugriffen jedesmal erneut zerlegt und zusammengesetzt)
c) Und wenn die Anzahl nicht mehr als String gehalten wird, kann man sich auch noch die ganzen Integer<>String-Umwandlungen sparen.
d) Var und Const ist bei Objeten nicht nötig ... es sei denn man will wirklich den Instant
zeiger verändern und nicht nur den Inhalt
Delphi-Quellcode:
Procedure ZaehleAlleWoerterDerListe(TokenListe, TokenListeKorpus: TStringList);
var
i, i2: Integer;
token: String;
begin
for i := 0 to TokenListe.Count - 1 do
begin
token := GibMirToken(TokenListe[i], #9);
i2 := TokenListeKorpus.IndexOf(Token);
if i2 <= 0 then
TokenListeKorpus.AddObject(token, TObject(1))
else
TokenListeKorpus.Objects[i2] := TObject(Integer(TokenListeKorpus.Objects[i2]) + 1);
end;
end;
und in neueren Delphiversionen ginge auch sowas:
Delphi-Quellcode:
Procedure ZaehleAlleWoerterDerListe(TokenListe, TokenListeKorpus: TStringList);
var
i: Integer;
S, Token: String;
begin
for S in TokenListe do
begin
token := GibMirToken(S, #9);
i := TokenListeKorpus.IndexOf(Token);
if i <= 0 then
TokenListeKorpus.AddObject(token, TObject(1))
else
TokenListeKorpus.Objects[i] := TObject(Integer(TokenListeKorpus.Objects[i]) + 1);
end;
end;
Die Tockenliste sollte natürlich entsprechend erstellt werden, damit sie auch optimal genutzt werden kann
Delphi-Quellcode:
TokenListeKorpus := TStringList.Create;
TokenListeKorpus.Sorted := True;
TokenListeKorpus.Duplicates := dupIgnore;
Integer(TokenListeKorpus.Objects[i]) enthält dann also die Anzahl zu dem Token mit dem Namen TokenListeKorpus[i] .