我需要Ruby中的数据结构,它可以在添加或删除元素时对其元素进行排序,并允许(至少)从列表中弹出第一个元素。
我在ruby文档中找到的最接近的是SortedSet。但是,这似乎没有提供任何通过索引访问元素的方法(甚至可以弹出第一个元素)
这些是我需要的具体操作:
ruby是否为此内置了任何内容,或者是否有任何我可以获取的库可以提供给我?我可以毫不费力地实现一个但是如果可能的话我宁愿使用预先存在的那个。
目前我正在使用Ruby 1.8,但切换到1.9可能没问题。
编辑:
由于似乎存在一些混淆,我需要的排序不是插入对象的顺序。我需要基于<=>
运算符进行排序。通常我会弹出第一个元素,处理它(可能生成新元素),向列表中添加新元素,然后重复。添加的元素最终可能会在排序顺序中的任何位置结束,而不仅仅是在最后。
答案 0 :(得分:4)
可能想要为这款兼容红色黑树的1.8兼容宝石做这个(Ruby / RBTree):
http://www.geocities.co.jp/SiliconValley-PaloAlto/3388/rbtree/README.html
树总是保持平衡,树上的操作是O(log N)
这里还有一个红黑树实现:
http://github.com/kanwei/algorithms
集装箱:: RubyRBTreeMap
答案 1 :(得分:1)
虽然效率低下(如果您经常使用它),SortedSet
有一个to_a
方法可用于访问项目:
s = SortedSet.new
s << 1
s << 0
s << 3
puts s.to_a[0] # => 0