删除对象列表中除一个选定元素外的所有元素

时间:2015-05-06 13:40:32

标签: delphi

删除列表中的所有元素除了我希望保留在列表中的一个元素之外,最佳编码实践是什么?

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;

2 个答案:

答案 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);