2015-05-14 78 views
2

我有一個TList其中'項目被許多for -loops連續處理。我有時需要在列表中交換項目,以重新排列列表的視覺表示的順序(在StringGrid中)。如何在for循環中交換TList項目

如何交換這些項目?

我初步的想法是:

  • 在for循環,我認爲項目不應該被交換。
  • 如果我在定時器的'OnTimer事件中進行交換,將定時器的間隔設置爲非常短的時間間隔(例如1毫秒),那麼我認爲for循環只有一個毫秒的間歇。

這項工作?還是有更好的選擇?

+0

我們不能按照陳述來理解你的問題。請擴大。最有可能包括更詳細的問題描述和裁減代碼。 –

+0

當你說'我有時需要交換物品'時,如果你能更好地解釋你爲什麼要這樣做,那就太好了。你從中得到什麼?是否需要更改這些項目的順序,因爲處理一個項目可能取決於之前正在處理的另一個項目?是否有必要在每一個項目中處理所有項目,或者可以跳過某些項目,如果您要移動某些項目以使其新位置位於當前循環點之前,則可能會發生這些項目(項目將永遠不會被處理,因爲它被處理爲已經被處理)? – SilverWarior

回答

2

只要您確保TList中的物品數量不會發生變化,在for-loop期間交換物品就會非常好。請注意,根據即將交換的物品的索引,某些物品可能無法處理或可能會被處理兩次。

如果交換操作沒有從for循環中調用,那麼已經啓動的for循環將運行直到完成。你不能指望用一個定時器「插入」,因爲定時器的消息將不會被處理,直到for循環和所有周圍的代碼完成。

因此,對於你的問題的解決方案可能是:

  • 交換中的for循環,
  • 使用一個線程解決方案,以能夠做到同時放兩種不同的東西一個清單上的項目(此可能需要一些學習線程),
  • 等到完成for循環和交換,然後,
  • 分裂for循環的多個片段,以減少所需的時間,或
  • 使用計時器送爲了讓你的程序在兩者之間有一定的呼吸時間,請將多個for-loop放在一起。
+0

我要做的是由定時器#3。謝謝。 –

+0

@JO這裏沒有定時器的地方。如果你能正確解釋問題,你會做得更好。 –

+0

@DavidHeffernan我的問題是ngln完全解釋的。我使用了一個計時器,它運行良好,沒有突出的過載。謝謝。 –