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

标签 delphi list-manipulation

我有一个 TList,其中的项目由许多 for 循环连续处理。有时我需要交换列表中的项目,以便重新排列列表的视觉表示形式(在 StringGrid 中)。

我如何交换这些元素?

我的初步想法是:

  • 在 for 循环期间,我认为不应交换元素。
  • 如果我在计时器的 OnTimer 事件中进行交换,并将计时器的间隔设置为非常短的间隔(例如 1 毫秒),那么我认为 for 循环将只有一个那一毫秒的间歇。

这行得通吗?或者有更好的选择吗?

最佳答案

只要确保 TList 中的项目计数不会改变,在 for 循环期间交换项目就完全没问题。请注意,根据要交换的元素的索引,某些元素可能不会被处理或可能被处理两次。

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

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

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

关于delphi - 如何在 for 循环期间交换 TList 项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30241467/

相关文章:

wolfram-mathematica - mathematica 中的两个列表操作

python - 如何在 Python 中以特定方式重组列表

Python 嵌套列表操作

delphi - 从 Delphi 访问包含 VT_RECORD 的 VT_ARRAY 的 OleVariant

android - onActivityResult 等同于 Delphi XE5?

windows - 如何识别应用程序打算执行/运行文件?

delphi - 从远程 FTP 下载文件列表

forms - 如何自动将焦点返回到我的应用程序

python - 如何在python中从一个列表中创建多个列表