2016-02-29 104 views
0

我已經設置了一個循環遍歷列表的For Each語句。該列表由'像素'組成,這是一個自定義的圖片框類。我需要設置一個以相反順序遍歷列表的循環。這是我的正常循環是什麼樣子:VB:通過列表向後循環

 For Each Tile As Pixel In PixelList 
      If Tile.PixelNumber = 1 Then 
       Tile.NewColour() 
      End If 
     Next 

PixelNumber僅僅是保持數,其中像素是一個整型變量。

像素是自定義圖片框類

PixelList是列表

我需要能夠建立一個類似的循環,而是一個通過時,我瓷磚是相反的順序不勝枚舉的名字添加。所以是第一個出現的情況。

+2

'對於i爲整數= PixelList.Count - 1向0步驟-1'的 – LarsTech

+0

可能的複製[?可以通過一個foreach向後遍歷](http://stackoverflow.com/questions/1211608/可能對迭代向後遍歷一個foreach) – Icemanind

回答

2

вʀaᴎᴅᴏƞвєнᴎєƞ的方式是最有效的,但一個簡單的替代方法是使用List(Of T).Reverse() function,雖然改變列表本身的順序。

PixelList.Reverse() 
    For Each Tile As Pixel In PixelList 
     If Tile.PixelNumber = 1 Then 
      Tile.NewColour() 
     End If 
    Next 
+1

在List中使用'Reverse()'方法可行,但如前所述,如果問題出現,那麼似乎會出現兩個循環在同一個名單上;一個從上到下,另一個按相反的順序進行。使用'Reverse()'方法在每次循環需要它時反轉列表,然後跟蹤列表在給定時刻處於哪個順序將會增加大量的開銷並且增加了不必要的複雜性。 –

1

按索引訪問列表,該索引從集合中元素的數量開始並以1遞減。

For i as Integer = PixelList.Count - 1 To 0 Step -1 
    If DirectCast(PixelList(i), Pixel).PixelNumber = 1 then DirectCast(PixelList(i), Pixel).NewColour() 
Next