如何在for循环中交换TList项目

时间:2015-05-14 15:40:02

标签: delphi list-manipulation

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

如何更换这些物品?

我的初步想法是:

  • 在for循环期间,我认为不应该交换项目。
  • 如果我在计时器中进行交换' OnTimer事件,设置了定时器'间隔到很短的间隔(例如1毫秒),那么我认为for循环只有一毫秒的间歇。

这会有用吗?或者有更好的选择吗?

1 个答案:

答案 0 :(得分:2)

只要您确保TList中的项目计数没有变化,在for循环期间交换项目就完全没问题了。请注意,根据即将交换的项目的索引,某些项目可能无法处理或可能会被处理两次。

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

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

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