Langsam, aber sofort umzusetzen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| Var BookList : TStringlist;
Begin Booklist := TStringlist.Create; Booklist.Sorted := True; ForEach Book in MyBooks do begin i := Booklist.indexOf (Book.Title); If i=-1 Then Booklist.AddObject (Book.Title, Pointer (1)) else Booklist.Objects[i] := Pointer (Integer (Booklist.Objects[i]) + 1); End; End; |
Ich verwende die Objects-Eigenschaft der TStringList, die eigentlich dazu dient, pro String ein Object mit zu speichern, einfach als Zähler.
Schneller wäre das mit einer entsprechend schnellen Datenstruktur, z.B. meinen String-Hashtabellen (such mal nach TStringDictionary hier, oder in der DP). In IniFiles schlummert eine Klasse, die bis ca. 30.000 Strings auch ganz schön schnell ist, die THashedStringList, damit geht o.g. Code viel schneller. Leider degeneriert die Performance bei sehr vielen Strings und dann ist die THashedStringList langsamer als eine normale TStringList..
Na denn, dann. Bis dann, denn.