我通过我的模板 a TreeSet
with Strings
。但是,当我像这样遍历集合时:
@(usernames : TreeSet[String])
@for( name <- usernames){
@name ,
}
但是,这些名称永远不会以正确的顺序打印。
如何遍历模板中的集合并按顺序打印名称?
我通过我的模板 a TreeSet
with Strings
。但是,当我像这样遍历集合时:
@(usernames : TreeSet[String])
@for( name <- usernames){
@name ,
}
但是,这些名称永远不会以正确的顺序打印。
如何遍历模板中的集合并按顺序打印名称?
这与 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 ,
}
任何 Set 类都没有保证排序,因此最好在迭代之前对其进行排序。
如果您要按字母顺序打印它们,则应将其转换为 List 然后迭代
@(usernames : TreeSet[String])
@for( name <- usernames.toList().sortWith(_ < _)){
@name ,
}