我将模板TreeSet
传递给Strings
。但是,当我循环遍历这样的集合时:
@(usernames : TreeSet[String])
@for( name <- usernames){
@name ,
}
但是,名称永远不会以正确的顺序打印。
如何在模板中迭代我的设置并按顺序打印名称?
答案 0 :(得分:14)
这与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 ,
}
答案 1 :(得分:2)
任何Set类都没有保证排序,因此最好在迭代之前对其进行排序。
如果您打算按字母顺序打印,则应将其转换为List,然后迭代
@(usernames : TreeSet[String])
@for( name <- usernames.toList().sortWith(_ < _)){
@name ,
}