2015-06-09 57 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)