Delphi 如何在for循环期间交换TList项

Delphi 如何在for循环期间交换TList项,delphi,list-manipulation,Delphi,List Manipulation,我有一个t列表,其中的项目由许多为-循环连续处理。我有时需要交换列表中的项目,以便重新排列列表的可视表示顺序(在StringGrid中) 我如何交换这些物品 我的初步想法是: 在for循环过程中,我认为不应该交换物品 如果我在Timers'OnTimer事件中进行交换,并将计时器的间隔设置为非常短的间隔(例如1毫秒),那么我认为for循环将只有1毫秒的间隔 这样行吗?或者有更好的替代方案吗?只要您确保t列表中的项目计数不发生变化,在for循环中交换项目是完全正确的。请注意,根据即将交换的项目

我有一个
t列表
,其中的项目由许多
-循环连续处理。我有时需要交换列表中的项目,以便重新排列列表的可视表示顺序(在
StringGrid
中)

我如何交换这些物品

我的初步想法是:

  • 在for循环过程中,我认为不应该交换物品
  • 如果我在Timers'
    OnTimer
    事件中进行交换,并将计时器的间隔设置为非常短的间隔(例如1毫秒),那么我认为for循环将只有1毫秒的间隔

这样行吗?或者有更好的替代方案吗?

只要您确保
t列表中的项目计数不发生变化,在for循环中交换项目是完全正确的。请注意,根据即将交换的项目的索引,某些项目可能不会被处理或可能被处理两次

如果没有从for循环中调用exchange操作,那么已经启动的for循环将一直运行,直到完成为止。您不能期望使用计时器“中断”,因为在for循环和所有周围代码完成之前,不会处理该计时器的消息

因此,您的问题的解决方案可以是:

  • 交换for循环中的项目
  • 使用线程解决方案能够在一个列表上同时完成两件不同的事情(这可能需要一些关于线程的知识)
  • 等待for循环完成,然后交换
  • 将for循环拆分为多个切片以减少所需时间,或
  • 使用计时器启动多个for循环,以便在其间给程序一些喘息时间

我们无法理解您提出的问题。请展开。最有可能包括对您的问题的更详细描述,并减少代码。当您说“我有时需要交换物品”时,如果您能更好地解释您为什么要这样做,那就太好了。你从中得到了什么?是否需要更改这些项目的顺序,因为一个项目的处理可能依赖于之前已处理的另一个项目?是否有必要在每个for lop中处理所有项目,或者如果您移动某些项目,使其新位置位于当前循环点之前,是否可以跳过其中一些项目(项目将永远不会被处理,因为它已被处理)?@JO此处没有计时器的位置。如果你能正确地解释这个问题,你会做得更好。@DavidHeffernan我的问题正是ngln解释的。我用了一个定时器,它工作得很好,没有明显的过载。谢谢。你几乎肯定有错误的解决方案。但你不需要我的建议。这很好。