我有一个List [Any]的队列,但不知何故,dequeue没有返回正确的结果,也没有从队列中删除该项目。知道为什么会这样吗?
以下是一个例子:
scala> val a = scala.collection.immutable.Queue(List(1, "A", "B", 987), List(2, "C", "D", 456), List(3, "E", "F", 123))
a: scala.collection.immutable.Queue[List[Any]] = Queue(List(1, A, B, 987), List(2, C, D, 456), List(3, E, F, 123))
scala> a.dequeue
res5: (List[Any], scala.collection.immutable.Queue[List[Any]]) = (List(1, A, B, 987),Queue(List(2, C, D, 456), List(3, E, F, 123)))
scala> a
res6: scala.collection.immutable.Queue[List[Any]] = Queue(List(1, A, B, 987), List(2, C, D, 456), List(3, E, F, 123))
答案 0 :(得分:4)
您使用了不可变队列,因此dequeue
不会修改原始队列,而是将head元素与head元素一起作为元组返回:
val (elem, newQ) = oldQ.dequeue
例如,您可以将尾部队列提供给递归调用以进行处理。像这样:
def pq(q: Queue[List[Any]]): Unit = {
q.dequeue match {
case (head, tail) =>
println(head + "..."); // ... process head element ...
if (tail.nonEmpty) pq(tail)
}
}