如何在Velocity foreach循环中获得从零开始的计数

时间:2011-10-21 09:25:49

标签: java foreach velocity

我试图在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指令。

4 个答案:

答案 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)

根据the doc,您可以指定:

directive.foreach.counter.initial.value = 0

在velocity.properties文件中。

答案 3 :(得分:2)

嗯,显然你不能同时拥有这两者 - 你需要在显示时进行数学计算,或者创建一个custom directive(和here's the article the SO post links to)。例如,您可以#forEachZeroBased#forEachOneBased

自定义指令有时是非常有用的,虽然IMO不是其中之一 - 只是做数学,这是显而易见的解决方案,并且它只是没有那么大的交易。