6

我通过我的模板 a TreeSetwith Strings。但是,当我像这样遍历集合时:

@(usernames : TreeSet[String])
@for( name <- usernames){
    @name ,
}

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

如何遍历模板中的集合并按顺序打印名称?

4

2 回答 2

15

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

Scala for 循环的行为与 Scala 模板中的 for 循环之间显然存在差异。如果您将代码作为常规 Scala 代码运行,则显然保留了 TreeSet 的顺序:

val users = TreeSet("foo", "bar", "zzz", "abc")    
for (user <- users) {
  println(user)
}

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

@for(name <- usernames.iterator) {
  @name ,
}

或将 TreeSet 转换为序列:

@for(name <- usernames.toSeq) {
  @name ,
}
于 2013-05-01T10:35:30.693 回答
2

任何 Set 类都没有保证排序,因此最好在迭代之前对其进行排序。

如果您要按字母顺序打印它们,则应将其转换为 List 然后迭代

@(usernames : TreeSet[String])
@for( name <- usernames.toList().sortWith(_ < _)){
    @name ,
}
于 2013-05-01T10:38:16.943 回答