Мне нужен datastructure в Ruby, который сохраняет его элементы отсортированными, поскольку элементы добавлены или удалены, и позволяет (по крайней мере), способности вытолкать первый элемент от списка.
Самой близкой вещью, которую я нашел в рубиновых документах, является SortedSet. Однако это, кажется, не обеспечивает способа получить доступ к элементам их индексом (или даже вытолкать первый элемент прочь)
Это определенные операции, в которых я нуждаюсь:
Рубину встраивали что-нибудь для этого или является там какими-либо библиотеками, которые я могу захватить, который дал бы его мне? Я мог реализовать один без слишком большой трудности, но я буду скорее использовать существующий ранее, если это возможно.
В настоящее время я использую Ruby 1.8, хотя переключение на 1,9, вероятно, было бы в порядке.
Править:
С тех пор, кажется, существует некоторый беспорядок, сортировка, в которой я нуждаюсь, не является порядком, что объекты вставляются. Мне нужна сортировка, чтобы быть на основе <=>
оператор. Обычно я буду выталкивать первый элемент, обрабатывая это (который может генерировать новые элементы), добавляя новые элементы к списку, затем повторяясь. Добавляемые элементы могли закончиться где угодно в порядке сортировки, не только в конце.
Может потребоваться приспособить этот 1.8-совместимый драгоценный камень для красных черных деревьев, которые это делает (Ruby / RBTree):
http://www.geoCities.co.jp/siliconvalley-paloalto/3388/rbtree/radme. HTML
Дерево всегда сохраняется сбалансированным, операциями на дереве O (log n)
Также здесь также реализация красного черного дерева:
http://github.com/kanwei/algorithms
Контейнеры :: RubyRBTreemap
Хотя неэффективно (если вы его часто используете), сортируется
имеет метод
TO_A
, который вы можете использовать для доступа к элементам:
s = SortedSet.new
s << 1
s << 0
s << 3
puts s.to_a[0] # => 0