对于NVelocity中的循环

Mir*_*lus 4 c# arrays nvelocity loops velocity

NVelocity是否支持#for循环?我查看了文档,我能找到的就是#foreach循环.

我想循环一个二维数组.

ser*_*erg 10

您可以[n..m]在foreach循环中使用范围运算符来模拟正常循环.您也可以通常的方式访问多维数组元素$array[n][m].

例如,如果你有这样的2d数组(抱歉Java代码):

String[][] testArray = new String[][] {{"a1","b1"},{"a2","b2"},{"a3","b3"}};
Run Code Online (Sandbox Code Playgroud)

您可以像这样在Velocity中循环它:

#set($sizeX = $testArray.size() - 1)
#set($sizeY = $testArray[0].size() - 1)
#foreach($i in [0..$sizeX])
    #foreach($j in [0..$sizeY])
        e[$i][$j] = $testArray[$i][$j] <br/>
    #end
#end
Run Code Online (Sandbox Code Playgroud)

哪个输出:

e[0][0] = a1
e[0][1] = b1
e[1][0] = a2
e[1][1] = b2
e[2][0] = a3
e[2][1] = b3 
Run Code Online (Sandbox Code Playgroud)

更新:

显然,根据changelog,仅在Velocity 1.7b1中引入了括号内的语法.在旧版本中,我们只需要用get(i)Velocity中的数组替换括号ArrayList(在Java中).所以,这应该工作:

#set($sizeX = $testArray.size() - 1)
#set($sizeY = $testArray.get(0).size() - 1)
#foreach($i in [0..$sizeX])
    #foreach($j in [0..$sizeY])
        e[$i][$j] = $testArray.get($i).get($j) <br/>
    #end
#end
Run Code Online (Sandbox Code Playgroud)