2015-06-09 55 views
2

我有一个可变的SortedSet,我可以通过做for (item <- nameOfMySortedSet)来迭代它。不过,我希望能够做同样的事情,但在nameOfMySortedSet的相反。我似乎没有看到此数据类型的reverse()选项?有没有另一种方法来做到这一点?在Scala中对已排序集的反向进行迭代?

回答

2

解决方案,

val sSet = SortedSet(4,3,5) 
sSet.foldLeft(List[Int]())((x,y)=>y::x) 

如果你必须这样做过于频繁,你可能有救Set以相反的顺序。使用不同的Ordering

0

下面的作品,但我不会想保卫它作为高效:

val s = collection.SortedSet(1,3,4) 
    for (i <- s.to[List].reverse) 
    println(i) 
3

您可以尝试建立一个新的SortedSet与顺序颠倒:

scala> val mySet = collection.mutable.SortedSet("1", "2", "3") 
mySet: scala.collection.mutable.SortedSet[String] = TreeSet(1, 2, 3) 

scala> collection.mutable.SortedSet(mySet.toSeq:_*)(mySet.ordering.reverse) 
res0: scala.collection.mutable.SortedSet[String] = TreeSet(3, 2, 1) 

或者你也可以转换它到一个列表或seq并运行反向:

scala> mySet.toSeq.reverse 
res1: Seq[String] = ArrayBuffer(3, 2, 1)