Рубин имеет тип списка, который сохраняет содержание отсортированным, как добавляет/удаляет, происходят?

Мне нужен datastructure в Ruby, который сохраняет его элементы отсортированными, поскольку элементы добавлены или удалены, и позволяет (по крайней мере), способности вытолкать первый элемент от списка.

Самой близкой вещью, которую я нашел в рубиновых документах, является SortedSet. Однако это, кажется, не обеспечивает способа получить доступ к элементам их индексом (или даже вытолкать первый элемент прочь)

Это определенные операции, в которых я нуждаюсь:

  • Добавьте объект к списку
  • Вытолкайте первый объект прочь списка
  • Проверьте, находится ли объект в списке
  • Удалите объект из списка (объектом, не индексом)

Рубину встраивали что-нибудь для этого или является там какими-либо библиотеками, которые я могу захватить, который дал бы его мне? Я мог реализовать один без слишком большой трудности, но я буду скорее использовать существующий ранее, если это возможно.

В настоящее время я использую Ruby 1.8, хотя переключение на 1,9, вероятно, было бы в порядке.

Править:

С тех пор, кажется, существует некоторый беспорядок, сортировка, в которой я нуждаюсь, не является порядком, что объекты вставляются. Мне нужна сортировка, чтобы быть на основе <=> оператор. Обычно я буду выталкивать первый элемент, обрабатывая это (который может генерировать новые элементы), добавляя новые элементы к списку, затем повторяясь. Добавляемые элементы могли закончиться где угодно в порядке сортировки, не только в конце.

10
задан Krease 11 July 2014 в 22:35
поделиться

2 ответа

Может потребоваться приспособить этот 1.8-совместимый драгоценный камень для красных черных деревьев, которые это делает (Ruby / RBTree):

http://www.geoCities.co.jp/siliconvalley-paloalto/3388/rbtree/radme. HTML

Дерево всегда сохраняется сбалансированным, операциями на дереве O (log n)

Также здесь также реализация красного черного дерева:

http://github.com/kanwei/algorithms

Контейнеры :: RubyRBTreemap

5
ответ дан 4 December 2019 в 03:16
поделиться

Хотя неэффективно (если вы его часто используете), сортируется имеет метод TO_A , который вы можете использовать для доступа к элементам:

s = SortedSet.new
s << 1
s << 0
s << 3
puts s.to_a[0] # => 0
1
ответ дан 4 December 2019 в 03:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: