gpt4 book ai didi

scala - scala队列的最大长度

转载 作者:行者123 更新时间:2023-12-03 20:01:13 30 4
gpt4 key购买 nike

我很好奇 Scala 是否在它的集合类中隐藏了一些我可以使用的 gem 。基本上我正在寻找类似 FIFO 队列的东西,但是它的大小有一个上限,这样当达到限制时,最旧的(第一个)元素就会从队列中删除。过去我自己在 Java 中实现了这一点,但如果可能的话,我宁愿使用一些标准的东西。

最佳答案

子类化通常更可取的替代方法是(不幸的是)“pimp my library”模式。您可以使用它来添加 enqueueFinite方法 Queue ,像这样:

import scala.collection.immutable.Queue
class FiniteQueue[A](q: Queue[A]) {
def enqueueFinite[B >: A](elem: B, maxSize: Int): Queue[B] = {
var ret = q.enqueue(elem)
while (ret.size > maxSize) { ret = ret.dequeue._2 }
ret
}
}
implicit def queue2finitequeue[A](q: Queue[A]) = new FiniteQueue[A](q)

每当 queue2finitequeue在范围内,可以对待 Queue对象就好像它们有 enqueueFinite方法:
val maxSize = 3
val q1 = Queue(1, 2, 3)
val q2 = q1.enqueueFinite(5, maxSize)
val q3 = q2.map(_+1)
val q4 = q3.enqueueFinite(7, maxSize)

这种方法优于子类化的优点是 enqueueFinite所有人都可以使用 Queue s,包括那些通过 enqueue 等操作构造的, map , ++ , ETC。

更新 :正如 Dylan 在评论中所说, enqueueFinite还需要获取最大队列大小的参数,并根据需要删除元素。我更新了代码。

关于scala - scala队列的最大长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6918731/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com