2011-04-20 68 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