我想知道如何以最佳功能方式使用Queue。 例如,我想将元素出列并使用递归函数打印它们。 我想要最美丽的功能。
例如,这是一个按我想要的功能。但我不喜欢if。
他们是更好的使用队列的方法吗?
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))
感谢您的回复。
答案 0 :(得分:3)
Queue
没有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)
打印出所有内容。
答案 1 :(得分:2)
您无需测试case _
:
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