我应该如何*使用scala.collection.immutable.Queue?
发布时间:2020-12-16 09:39:20 所属栏目:安全 来源:网络整理
导读:我有我认为处理队列的最常见的情况。我将读取队列的前端,对元素执行操作(这可能会导致更多的元素被添加到队列中),然后循环,直到队列为空。 我的第一本能是foreach,但不是,显然排队(即使是一个可变的队列)是严格的,并且foreach循环遍历队列中所有元素,
我有我认为处理队列的最常见的情况。我将读取队列的前端,对元素执行操作(这可能会导致更多的元素被添加到队列中),然后循环,直到队列为空。
>我的第一本能是foreach,但不是,显然排队(即使是一个可变的队列)是严格的,并且foreach循环遍历队列中所有元素,当迭代开始时。 你会认为它会是这样的 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)。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |