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