Ruby数据结构-最大

Ruby数据结构-最大,ruby,data-structures,Ruby,Data Structures,我正在寻找具有以下特征的Ruby数据结构,希望不必使用自己的结构: 先进先出(即队列) 允许指定最大长度 当队列达到容量时,新项目被推入,最旧的项目被丢弃 我本以为可以完成这项工作,但它不符合标准3,因为它会在达到最大长度时阻止推送 有人知道在维护良好的图书馆里有这样一头野兽吗 谢谢。听起来您在寻找循环队列或环形缓冲区 已接近,但如果超出可用空间,仍将抛出 我发现了一些其他的实现作为示例代码,但到目前为止,还没有打包成gem。一个是。这可能是一个相当简单的实现,可能需要一些工作 似乎包含了一个相

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

  • 先进先出(即队列)
  • 允许指定最大长度
  • 当队列达到容量时,新项目被推入,最旧的项目被丢弃
  • 我本以为可以完成这项工作,但它不符合标准3,因为它会在达到最大长度时阻止推送

    有人知道在维护良好的图书馆里有这样一头野兽吗


    谢谢。

    听起来您在寻找循环队列或环形缓冲区

    已接近,但如果超出可用空间,仍将抛出

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


    似乎包含了一个相当完整的环形缓冲区实现。

    听起来像是在寻找循环队列或环形缓冲区

    已接近,但如果超出可用空间,仍将抛出

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


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

    JasonTue答案中的最后两个链接现在不存在了,但我在这里发现了(可能是相同的)RingBuffer片段:

    JasonTue答案中的最后两个链接现在不存在了,但我在这里发现了(可能是相同的)RingBuffer片段:

    您可以试试这一个

    像这样使用它:

    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]
    
    ring=ring.new(4)
    ring.pos#=>0
    环1
    你可以试试这个

    像这样使用它:

    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]
    
    ring=ring.new(4)
    ring.pos#=>0
    环1
    
    打电话谢谢你给我两个新的搜索词:-)“循环数组”是我的同事很久以前使用的另一个词,特别是当目的(比如堆栈与队列)不明确时。谢谢你给我两个新的搜索词:-)“循环数组”是我的同事很久以前使用的另一个词,特别是如果目的(比如堆栈与队列)不够明确。