Thread split off from if Data.TryGetValue(aId, vNewData) then vNewData.DataName := aName; else begin   vNewData := TDataRec.Create;  vNewData.DataId := aId; vNewData.DataName := aName; Data.Add(aId, vNewData); end;   @Stefan Glienke - What is the best container for random lookup access for records?