迭代按顺序播放Play框架

Aer*_*rus 4 templates scala playframework-2.0

我将模板传递给TreeSetStrings.但是,当我像这样循环遍历集合时:

@(usernames : TreeSet[String])
@for( name <- usernames){
    @name ,
}
Run Code Online (Sandbox Code Playgroud)

但是,名称永远不会以正确的顺序打印.

如何在模板中迭代我的设置并按顺序打印名称?

小智 14

这与Scala模板的工作方式有关.我怀疑你的TreeSet集合在引擎盖下映射到不同的集合,因此不保留排序.

Scala for循环的行为与Scala模板中的for循环之间明显不同.如果您将代码作为常规Scala代码运行,那么TreeSet的顺序显然会被保留:

val users = TreeSet("foo", "bar", "zzz", "abc")    
for (user <- users) {
  println(user)
}
Run Code Online (Sandbox Code Playgroud)

解决此问题的方法之一是在Scala模板中使用迭代器:

@for(name <- usernames.iterator) {
  @name ,
}
Run Code Online (Sandbox Code Playgroud)

或将TreeSet转换为序列:

@for(name <- usernames.toSeq) {
  @name ,
}
Run Code Online (Sandbox Code Playgroud)