删除列表中的所有元素除了我希望保留在列表中的一个元素之外,最佳编码实践是什么?
TMyCLass = Class()
....
end;
MyObjectList = TObjectList <TMyClass>;
var MySaveClass : TMyCLass;
begin
MySaveClass = MyObjectList.items[saveindex];
for i = 1... MyObjectList.count-1 do
if i <> saveindex then
MyObjectList.delete (i); ?? // not working :-)
end;
答案 0 :(得分:4)
正如TLama在评论中所说,Extract项目,Clear列表(如果OwnsObjects为false,循环并首先释放每个项目),然后Add项目返回英寸
var
SavedItem: TMyClass;
...
SavedItem := MyObjectList.Extract(MyObjectList.Items[i]);
// Loop here to free if needed because list doesn't own objects
MyObjectList.Clear;
MyObjectList.Add(SavedItem);
答案 1 :(得分:1)
如果Objectlist具有OwnsObjects:= True,那么您可以删除元素。 但要注意使其倒退,否则你可能会收到错误。
for i := MyObjectlist.count -1 downto 0 do
if i = Saveindex then
continue
else
MyObjectList.Delete(i);