Tlist will do as you want because it stores objects and each object has a NAME:String that you can define if you wish...
That's not
TList:
TList just manages a list of pointers. What you meant, I think, is
TCollection which is used for collections of named objects, with each item having a
DisplayName. The drawback, for the OP's use, is that the contained items must descend from
TCollectionItemOr were you thinking of something other than
Classes.TList?
ETA: Of course, there are also the specialized TClassList. TObjectList, TFPOjectList, etc. but none of them allows you to associate a string with an object with the easy of a TStringList.
I mean, you just do:
{Add an object}
StringList.AddObject('key', AnObject)
{ Retrieve it: }
i := StringList.IndexOf('key'); { this two lines to get the index}
if i >= 0 then { from the associated sring}
MyObject := StringList.Objects[i];
which is basically what the OP wanted.