我试图在Velocity #foreach
指令中获得一个从零开始的计数器。
如果我使用:
#foreach ($item in $list)
item.getName() : $velocityCount
#end
我会得到:
Fred : 1
Wilma : 2
Barney : 3
但我需要:
Fred : 0
Wilma : 1
Barney : 2
从速度模板的角度来看,解决方案必须尽可能简单。
修改:
我可以用:
#foreach ($item in $list)
#set( $num = $velocityCount - 1 ) //The white space in mandatory
item.getName() : $num
#end
它有效。但我正在寻找更优雅的解决方案。
编辑2 :
我也需要基于单一的计数器。也就是说,在同一个模板中,我很可能会有一个#foreach
指令,它需要一个从零开始的计数器和另一个需要一个基本计数器的#foreach
指令。
答案 0 :(得分:22)
如果您使用的是Velocity 1.7,则循环内部有$foreach.index
(基于0)和$foreach.count
(基于1)特殊变量。
$velocityCount
是很久以前被弃用的东西。
答案 1 :(得分:4)
// 1. Assign a list of unique random numbers to 5 variables and 5 constants. why variables and constants?
// 2. Place them in an array
var arr = (1...10).map{ _ in Int(arc4random_uniform(50)) }
print(arr) // -> [19, 41, 27, 47, 12, 38, 38, 48, 5, 41]
// 3. Sort by ascending order
arr.sort()
print(arr) // -> [5, 12, 19, 27, 38, 38, 41, 41, 47, 48]
// 4. to retrieve the highest and lowest number easily
print(arr.first!) // -> 5
print(arr.last!) // -> 48
答案 2 :(得分:2)
答案 3 :(得分:2)
嗯,显然你不能同时拥有这两者 - 你需要在显示时进行数学计算,或者创建一个custom directive(和here's the article the SO post links to)。例如,您可以#forEachZeroBased
和#forEachOneBased
。
自定义指令有时是非常有用的,虽然IMO不是其中之一 - 只是做数学,这是显而易见的解决方案,并且它只是没有那么大的交易。