...aber warum das
Rad zweimal erfinden?
Code:
fList: TObjectList<TListData>
erfindet ja das
Rad nicht neu...
Sind denn diese anderen Listen von einen anderen (eigenen) Listentyp ohne Hash?
Es ist eine einfache Liste (in der Interfacelosen-Variante vom Type TObjectList) ohne weitere Daten (der Besitzer durchläuft sie, um z.B. allen Elementen eine Nachricht zu übermitteln).
Und der entscheidene Unterschied ist: Ich habe keine Speicherlecks beim Beenden (laut FastMM).
Die habe ich auch nicht, solange es keine Quer-Referenzen gibt. Sobald aber eines der Objekte eine zusätzliche Liste pflegt (siehe Beitrag #39, uImpl.pas, Zeile 130), beginnt der Spaß mit der Referenzzählung. Ich nehme an, dass sich das - unabhängig von der verwendeten Liste - nur durch Manipulation der Referenzzählung (Beitrag 45, himitsu), wirklich lösen lässt.
Um wieviel langsamer ist denn die Suche von TDictionary im Verhältnis zu deiner Lösung?
Meine braucht im worst case log2(n) die von Delphi im Durchschnitt n/2, das sind bei 100000 Elementen 17 zu 50000 Vergleiche...
Edit: Was deine Version in #51 angeht, die hat zwar kein Speicherleck, funktioniert aber andererseits auch nicht richtig (du erzeugst zwar 4 Elemente die alle IInteger unterstützen, aber bei der Ausgabe sind es nur mehr 3....)