Delphi 从objectlist中删除除一个选定元素之外的所有元素

Delphi 从objectlist中删除除一个选定元素之外的所有元素,delphi,Delphi,在从列表中删除所有元素(我想保留在列表中的一个元素除外)的最佳编码实践是什么 TMyCLass = Class() .... end; MyObjectList = TObjectList <TMyClass>; var MySaveClass : TMyCLass; begin MySaveClass = MyObjectList.items[saveindex]; for i = 1... MyObjectList.count-1 do

在从列表中删除所有元素(我想保留在列表中的一个元素除外)的最佳编码实践是什么

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;
TMyCLass=Class()
....
结束;
MyObjectList=对象列表;
var MySaveClass:TMyCLass;
开始
MySaveClass=MyObjectList.items[saveindex];
对于i=1。。。MyObjectList.count-1 do
如果我保存索引的话
MyObjectList.delete(i);??//不工作:-)
结束;

如果Objectlist有OwnsObjects:=True,则可以删除元素。 但是要注意向后移动,否则可能会出错

for i := MyObjectlist.count -1 downto 0 do
  if i = Saveindex then
    continue
  else
    MyObjectList.Delete(i);

如果Objectlist有OwnsObjects:=True,则可以删除元素。 但是要注意向后移动,否则可能会出错

for i := MyObjectlist.count -1 downto 0 do
  if i = Saveindex then
    continue
  else
    MyObjectList.Delete(i);

正如TLama在一篇评论中所说,项目、列表(如果OwnsObjects为false,则首先循环并释放每个项目),然后再返回项目

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

正如TLama在一篇评论中所说,项目、列表(如果OwnsObjects为false,则首先循环并释放每个项目),然后再返回项目

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

这个项目。然后列表,项目返回列表。在我看来这是浪费。@TLama:你为什么一直滥用评论来给出答案?这个项目。然后列表,项目返回列表。在我看来这是浪费。@TLama:你为什么一直滥用注释来给出答案?如果i=Saveindex,我不想删除这个对象,因此使用i