2011-04-20 112 views

回答

51

嘗試做這樣的:

#set($start = 0) 
#set($end = 4) 
#set($range = [$start..$end]) 
#foreach($i in $range) 
    doSomething 
#end 

的代碼沒有經過測試,但它應該像這樣工作。

+2

//哇...我不知道我可以使用$ variable .. $變量來創建一個範圍。非常感謝!! – Moon 2011-04-20 18:58:19

29

您不必像接受的答案那樣使用#set。您可以使用這樣的事情:

#foreach($i in [1..$end]) 
    LOOP ITERATION: $i 
#end 

如果你想零索引你必須使用一個#set,因爲你不能在範圍內的運營商減一:

#set($stop = $end - 1) 
#foreach($i in [0..$stop]) 
    LOOP ITERATION: $i 
#end 
+0

第二個不起作用。您不能在範圍運算符中內聯-1。你必須首先'#set($ foo = $ end - 1)',然後使用'#foreach($ i in [0 .. $ foo])' – Starwarswii 2017-07-21 15:22:33

+1

謝謝@Starwarswii,更正了它 – 2017-07-21 15:25:15

+0

我剛剛提交了一個編輯。 '#set($ stop = $ end-1)'不起作用,'$ stop'保持爲空。空間在Velocity中很重要。要正確分配它,請使用'#set($ stop = $ end - 1)'或'#set($ stop = $ end - 1)'。 '#set($ stop = $ end -1)'也是無效 – Starwarswii 2017-07-21 15:30:55

2

我想補充另一種選擇Stephen Ostermiller的答案,你也可以使用$foreach.index創建一個零索引循環。如果要循環$n時間:

#foreach($unused in [1..$n]) 
    zero indexed: $foreach.index 
#end 

這裏,$unused是未使用的,而我們改用$foreach.index我們的指數,該指數從0開始

我們開始的範圍內,在1,因爲它的包容性,並因此它將以$unused循環爲[1,2,3,4,5],而$foreach.index爲[0,1,2,3,4]。

有關更多信息,請參閱the user guide