2011-04-20 17 views

Respuesta

51

tratar de hacerlo de esta manera:

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

El código no ha sido probado, pero debería funcionar de esta manera.

+2

// wow ... No sabía que puedo usar $ variable .. $ variable para hacer un rango. ¡¡Muchas gracias!! – Moon

29

No tiene que usar #set como la respuesta aceptada. Se puede usar algo como esto:

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

Si desea cero indexados usted tiene que utilizar uno #set porque no se puede restar un operador dentro de la gama:

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

Ese segundo no funciona. No puede alinear un -1 en un operador de rango. Tendría que '#set ($ foo = $ end - 1)' primero, luego usar '#foreach ($ i en [0 .. $ foo])' – Starwarswii

+1

Gracias @Starwarswii, lo corrigió –

+0

Acabo de enviar un editar. '#set ($ stop = $ end-1)' no funciona, y '$ stop' permanece nulo. Los espacios importan en Velocity. Para asignarlo correctamente, use '#set ($ stop = $ end - 1)' o '#set ($ stop = $ end - 1)'. '#set ($ stop = $ end -1)' tampoco es válido – Starwarswii

2

Sólo para añadir Otra opción para la respuesta de Stephen Ostermiller, también puede crear un bucle indexado cero usando $foreach.index. Si desea bucle $n veces:

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

aquí, $unused no se usa, y que en lugar de utilizar $foreach.index para nuestro índice, que comienza en 0.

Empezamos el rango a 1, ya que es inclusiva y por lo que se repetirá con $unused siendo [1, 2, 3, 4, 5], mientras que $foreach.index es [0, 1, 2, 3, 4].

Ver the user guide para más.