如何模式匹配scala不可变队列?

时间:2015-06-05 19:50:58

标签: scala

我想使用immutable.Queue,特别是

  1. 我想在不将其出列的情况下访问队列的头部。使用两个不可变列表/堆栈来实现不可变队列,并且从代码看起来这个操作不是恒定时间(参见此line),尽管dequeue是(摊销的常量时间)。有人可以确认或纠正我吗?

  2. 我喜欢List的模式匹配语法(例如list match { case head :: tail => ... })。我们对Queue也有类似的东西吗?

1 个答案:

答案 0 :(得分:9)

您可以在+:上使用通用匹配器Seq

val q = Queue.empty[Int]

q match {
  case x +: xs => // non-empty case
  case _ => // empty case
}

您还可以使用Queue' s unapplySeq

q match {
  case Queue(x, _*) => // non-empty case
  case Queue() => // empty case
}

请注意,这两者都可能比Queue.head效率更低,因为它们也必须构造出队队列,在摊销时间内只有O(1)