代码之家  ›  专栏  ›  技术社区  ›  Herms

ruby是否有一个列表类型,可以在添加/删除时对内容进行排序?

  •  7
  • Herms  · 技术社区  · 14 年前

    我在ruby文档中找到的最接近的东西是 SortedSet . 但是,这似乎没有提供任何通过索引访问元素的方法(甚至没有弹出第一个元素)

    以下是我需要的具体操作:

    • 将对象添加到列表中
    • 从列表中弹出第一个对象
    • 检查列表中是否有对象
    • 从列表中删除对象(按对象,而不是按索引)

    ruby是否为此内置了任何东西,或者是否有任何库可以提供给我?我可以实现一个没有太多困难,但如果可能的话,我宁愿使用一个已有的。

    目前我正在使用Ruby1.8,不过切换到1.9可能还可以。

    编辑:

    因为看起来有些混乱,所以我需要的排序不是插入对象的顺序。我需要的排序是基于 <=>

    2 回复  |  直到 10 年前
        1
  •  5
  •   jspcal    14 年前

    可能需要为红黑树(Ruby/RBTree)添加此1.8兼容的gem:

    http://www.geocities.co.jp/SiliconValley-PaloAlto/3388/rbtree/README.html

    树始终保持平衡,树上的操作为O(日志N)

    这里还有一个红黑树实现:

    http://github.com/kanwei/algorithms

    容器::RubyRBTreeMap

        2
  •  1
  •   Theo    14 年前

    虽然效率低下(如果您经常使用), SortedSet 有一个 to_a

    s = SortedSet.new
    s << 1
    s << 0
    s << 3
    puts s.to_a[0] # => 0