Search code examples
delphitstringlist

Better way to resize a TStringList?


I frequently find that I need to 'resize' a a TStringList to hold exactly N elements, either adding additional empty strings to the list, or deleting unneccessary ones.

On a C++ STL container I could use the resize method, but as that doesn't seem to exist, I usually do somethings like this (warning: pseudocode!).

list.beginUpdate;

while list.Count < requiredSize do
begin
   list.add('');
end;

while list.Count > requiredSize do
begin
   list.delete(list.count-1);
end;

list.endUpdate;

Is there a much simpler way of doing this that I've overlooked?


Solution

  • Judging from the implementation of TStringList.Assign, there is no better way to do this. They basically call Clear and add the strings one by one.

    You should of course put your code into a utility method:

    procedure ResizeStringList(List : TStrings; ANewSize: Integer);
    begin
    ...
    end;
    

    Or you could use a class helper to make your method appear to be part of TStringList itself.