如何在Scala中反转IndexedSeq?

3
有一个 IndexedSeq,如何从末尾向开始迭代它?
2个回答

9
如果您只想从末尾到开头迭代,请调用reverseIterator。如果想要应用map,则使用reverseMapfoldLeftfoldRight在相反的方向遍历,因此可以将每个都视为反转列表上的另一个;reduceRightscanRight同理。有一堆last方法可用于查找靠近结尾而不是开头的东西。除此之外,如果您不想在内存中复制集合,则使用reverse(重新创建整个集合)或.view.reverse.whatever。对于简单的foreach,通常使用reverseIterator即可。请保留HTML标记。

我不记得有这样的方法存在!我很高兴那天没有时间回答问题... :-) - Daniel C. Sobral
@DanielC.Sobral - 我记得它是因为我对它的存在感到相当失望;在我的集合接口中,我更喜欢简单性,而不是拥有我能想象到的每个便利方法。 - Rex Kerr

4
你可以将其反转:
scala> val x = IndexedSeq(1,2,3,4)
x: IndexedSeq[Int] = Vector(1, 2, 3, 4)

scala> x.reverse.foreach(println)
4
3
2
1

或者,根据您在迭代时所做的事情,foldRight可能是您想要的。 foldRight是一种从右到左遍历集合的折叠方式。

scala> x.foldRight(0){ (item, total) => println("adding "+item); total + item }
adding 4
adding 3
adding 2
adding 1
res121: Int = 10

谢谢。在查看方法列表时,我不知何故错过了显而易见的“reverse”。 - Ivan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接