Ruby数据结构 - 具有最大值的队列

时间:2012-04-24 01:17:33

标签: ruby data-structures

我正在寻找具有以下特征的Ruby数据结构,我希望不必自己动手:

  1. 先进先出(即队列)
  2. 允许指定最大长度
  3. 当队列达到容量时,将推入新项目并丢弃最旧的项目。
  4. 我认为SizedQueue可能已完成这项工作,但它不符合标准#3,因为它在达到最大长度时会阻止推送。

    在维护良好的图书馆中,有人知道这样的野兽吗?

    感谢。

3 个答案:

答案 0 :(得分:3)

听起来你正在寻找循环队列或环形缓冲区。

cbuffer已关闭,但如果超出可用空间仍会抛出。

我发现了一些其他实现作为示例代码,但到目前为止,还没有打包为gem。一个是this RingBuffer snippet。这可能是一个相当简约的实现,可能需要一些工作。

This location似乎包含一个相当完整的RingBuffer实现。

答案 1 :(得分:1)

JasonTrue的答案中的最后两个链接现在已经死了,但我在这里找到了(可能是相同的)RingBuffer片段:https://gist.github.com/eerohele/1904422

答案 2 :(得分:1)

您可以尝试这个https://gist.github.com/julik/a4c0b88abc17922f4f2a1a01a6bba530

像这样使用它:

ring = Ring.new(4)
ring.pos #=> 0
ring << :a # fills first element
ring.pos #=> 1
ring << :b << :c << :d # fills the rest
ring.to_a # [:a, :b, :c, :d] - Array of elements from the current position
ring.next #=> :a 
ring.to_a # [:b, :c, :d, :e] - Position shifted
ring << :z #=> overwrites :b and advances position
ring.to_a #=> [:c, :d, :a, :z]