使用scala不可变队列的最佳实践
我想知道如何以最佳功能方式使用队列。 例如,我想让元素出列并使用递归函数打印它们。 我想要最漂亮的功能 例如,这是一个做我想做的事情的函数。但我不喜欢if 他们是使用队列的更好方式吗使用scala不可变队列的最佳实践,scala,queue,Scala,Queue,我想知道如何以最佳功能方式使用队列。 例如,我想让元素出列并使用递归函数打印它们。 我想要最漂亮的功能 例如,这是一个做我想做的事情的函数。但我不喜欢if 他们是使用队列的更好方式吗 import scala.collection.immutable.Queue def printQ[A](p:Queue[A]) { if(!p.isEmpty) { p.dequeue match { case (x,xs) => println(x.toSt
import scala.collection.immutable.Queue
def printQ[A](p:Queue[A]) {
if(!p.isEmpty) {
p.dequeue match {
case (x,xs) =>
println(x.toString)
printQ(xs)
case _ =>
println("End")
}
}
}
printQ(Queue(1,2,4,5))
感谢您的回复。您无需测试
案例:
scala> @annotation.tailrec def printQ[A](p:Queue[A]) {
| if(!p.isEmpty) {
| p.dequeue match {
| case (x,xs) =>
| println(x.toString)
| printQ(xs)
| }
| }
| }
printQ: [A](p: scala.collection.immutable.Queue[A])Unit
scala> printQ(Queue(1,2,4,5))
1
2
4
5
函数必须是递归的吗
scala> for (i <- Queue(1, 2, 4, 5)) println(i)
1
2
4
5
scala>for(iQueue
没有一个dequeueOption
方法,这会使它变得更好。但是,请注意,匹配中的第一个条目是详尽的;您永远无法访问println(“End”)
代码。因此,您可以改进您的版本:
def printQ[A](p: Queue[A]) {
if (!p.isEmpty) p.dequeue match {
case (x,xs) =>
println(x.toString)
printQ(xs)
}
}
当然,由于这只是按顺序遍历队列,因此始终可以
p.foreach(println)
将所有内容打印出来。除了队列不按顺序迭代之外。或者它们也不一定按顺序迭代。@DanielC.Sobral-已授予;顺序相同是不可变的未记录功能。队列!p.isEmpty
可以被p.nonEmpty
替换。它更为简洁;)