加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

我应该如何*使用scala.collection.immutable.Queue?

发布时间:2020-12-16 09:39:20 所属栏目:安全 来源:网络整理
导读:我有我认为处理队列的最常见的情况。我将读取队列的前端,对元素执行操作(这可能会导致更多的元素被添加到队列中),然后循环,直到队列为空。 我的第一本能是foreach,但不是,显然排队(即使是一个可变的队列)是严格的,并且foreach循环遍历队列中所有元素,
我有我认为处理队列的最常见的情况。我将读取队列的前端,对元素执行操作(这可能会导致更多的元素被添加到队列中),然后循环,直到队列为空。

>我的第一本能是foreach,但不是,显然排队(即使是一个可变的队列)是严格的,并且foreach循环遍历队列中所有元素,当迭代开始时。
>我找不到一个while循环的语法。

你会认为它会是这样的

while (!q.isEmpty) {
   var (e,q) = q.dequeue
   ... }

将工作,除了我重新声明q。这样做有效:

while (!q.isEmpty) {
   var (e,q1) = q.dequeue
   q = q1
   ... }

但是男人呢,看起来错了吗?

解决方法

这里有一种避免任何vars的方法:

val q0 = collection.immutable.Queue("1","Two","iii")
Iterator.iterate(q0) { qi =>
  val (e,q) = qi.dequeue
  println("I just dequeued "+e)  // Your side-effecting operations go here
  if (e.length!=2) q.enqueue("..")  // Your changes to the queue go here
  else q
}.takeWhile(! _.isEmpty).foreach(identity)

您从初始队列q0开始,然后在qith步骤中,如果需要,您将出现队列并生成新队列,并返回下一步。

所有你离开的是停止条件(不是空的),然后,因为这只是定义一个进程,而不是实际的行动,你必须运行它(例如使用no-op foreach)。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读