class DoubleLinkedList
Constants
- VERSION
Attributes
head[RW]
last[RW]
Public Class Methods
from_a(*ary)
click to toggle source
# File lib/double_linked_list.rb, line 30 def from_a(*ary) elems = ary.flatten head = Element.new(elems.first) last = elems.drop(1).reduce(head) do |cur_last, datum| cur_last.append(datum) end new(head).tap do |o| o.last = last end end
new(datum)
click to toggle source
# File lib/double_linked_list.rb, line 25 def initialize(datum) @head = (datum.is_a?(Element) ? datum : Element.new(datum)) end
Public Instance Methods
append(datum)
click to toggle source
# File lib/double_linked_list.rb, line 42 def append(datum) self.last = last.append(datum) end
Also aliased as: <<
chunk_by(custom_dll = DoubleLinkedList, &block)
click to toggle source
# File lib/double_linked_list.rb, line 67 def chunk_by(custom_dll = DoubleLinkedList, &block) head.chunk_by([], custom_dll, &block) end
find(datum)
click to toggle source
# File lib/double_linked_list.rb, line 47 def find(datum) find_by do |elem| elem.datum == datum end end
find_by(&block)
click to toggle source
# File lib/double_linked_list.rb, line 53 def find_by(&block) head.find_next_by(false, &block) end
reverse_find(datum)
click to toggle source
# File lib/double_linked_list.rb, line 57 def reverse_find(datum) reverse_find_by do |elem| elem.datum == datum end end
reverse_find_by(&block)
click to toggle source
# File lib/double_linked_list.rb, line 63 def reverse_find_by(&block) last.find_previous_by(false, &block) end
select_by(&block)
click to toggle source
# File lib/double_linked_list.rb, line 71 def select_by(&block) head.select_by(&block) end
to_a()
click to toggle source
# File lib/double_linked_list.rb, line 75 def to_a [].tap do |ary| each{ |elem| ary << elem.datum } end end