2016-08-07 11 views
7

Liste boyunca yineleme önemsizdir. Bu durumda, üzerinde çalıştığım bir bileşenin bir TCollection özelliği. 0 endeksinden maksimum dizine kadar yineleme ile ilgili bir sorunum yok.Herhangi bir başlangıç ​​noktasından listeyi yineleyin ve baştan devam edilsin mi?

Ancak, ben biraz farklı şekilde yineleme ihtiyacı şimdi şey üzerinde çalışıyorum. Herhangi bir başlangıç ​​noktasından bir koleksiyon öğeleri listesiyle yinelemeli ve tüm öğelerin tam döngüsünü tamamlamam gerekir. Son liste öğesinden sonra, listenin başına otomatik olarak yineleme devam eder. Geleneksel yineleme gibi çalışır:

for X := 0 to SomeList.Count-1 do ... 

Ama gibi diğer bazı noktada başlayabilir:

netleştirmek için

for X := StartingPoint to EndingPoint do ... 

Ve olduğunu ben çözemiyorum "EndingPoint" . Yineleme sadece artar. Ama benim durumumda, yinelemenin ortasında bu mevcut yineleme pozisyonunu baştan sağa sıfırlamam gerekiyor. EndingPoint, StartingPoint'dan daha az olabilir, ancak yine de tam bir döngü yapması gerekir, burada bir kez sonuna ulaştığında, başlangıçtan başlar.

Yani, 5 öğe yerine sadece gidiş listesi ... lütfen

0, 1, 2, 3, 4 

Nasıl yapmam ...

2, 3, 4, 0, 1 

2'de başlatın ve yapmak isteyebilirsiniz böyle bir döngü yapmak?

cevap

15
for foo := 0 to Pred(SomeList.Count) do begin 
    i := (foo + StartingPoint) mod SomeList.Count; 
    ... 
end; 

döngü içine endeksi i kullanın; foo değişkenini dikkate almayın.

aralığının sonuna kadar ortalarından itibaren

, ifoo + StartingPoint eşit olacaktır. Bundan sonra, mod operatörü, yeniden i "tekrar sarmaya" başaracaktır.

+0

Böyle mükemmel. Çok minnettarım. –

İlgili konular