Class: Rambling::Trie::Container
- Inherits:
-
Object
- Object
- Rambling::Trie::Container
- Includes:
- Enumerable
- Defined in:
- lib/rambling/trie/container.rb
Overview
Wrapper on top of trie data structure.
Instance Attribute Summary collapse
-
#root ⇒ Nodes::Node
readonly
The root node of this trie.
Instance Method Summary collapse
-
#==(other) ⇒ Boolean
Compares two trie data structures.
-
#[](letter) ⇒ Nodes::Node
Get Node corresponding to a given letter.
-
#add(word) ⇒ Nodes::Node
(also: #<<)
Adds a word to the trie.
-
#children ⇒ Array<Nodes::Node>
Root node’s child nodes.
-
#children_tree ⇒ Array<Nodes::Node>
Root node’s children tree.
-
#compress ⇒ Container
Compresses the existing trie using redundant node elimination.
-
#compress! ⇒ Container
Compresses the existing trie using redundant node elimination.
-
#compressed? ⇒ Boolean
Indicates if the root Node can be compressed or not.
-
#concat(words) ⇒ Array<Nodes::Node>
Adds all provided words to the trie.
-
#each {|String| ... } ⇒ Object
Iterates over the words contained in the trie.
-
#initialize(root, compressor) {|Container| ... } ⇒ Container
constructor
Creates a new trie.
-
#inspect ⇒ String
A string representation of the container.
-
#key?(letter) ⇒ Boolean
(also: #has_key?, #has_letter?)
Check if a letter is part of the root Nodes::Node‘s children tree.
-
#partial_word?(word = '') ⇒ Boolean
(also: #match?)
Checks if a path for a word or partial word exists in the trie.
-
#scan(word = '') ⇒ Array<String>
(also: #words)
Returns all words that start with the specified characters.
-
#size ⇒ Integer
Size of the Root Node‘s children tree.
-
#to_a ⇒ Array<String>
Array of words contained in the root Node.
-
#word?(word = '') ⇒ Boolean
(also: #include?)
Checks if a whole word exists in the trie.
-
#words_within(phrase) {|String| ... } ⇒ Enumerator<String>
Returns all words within a string that match a word contained in the trie.
-
#words_within?(phrase) ⇒ Boolean
Checks if there are any valid words in a given string.
Constructor Details
Instance Attribute Details
#root ⇒ Nodes::Node
The root node of this trie.
11 12 13 |
# File 'lib/rambling/trie/container.rb', line 11 def root @root end |
Instance Method Details
#==(other) ⇒ Boolean
Compares two trie data structures.
118 119 120 |
# File 'lib/rambling/trie/container.rb', line 118 def == other root == other.root end |
#[](letter) ⇒ Nodes::Node
Get Node corresponding to a given letter.
141 142 143 |
# File 'lib/rambling/trie/container.rb', line 141 def [] letter root[letter] end |
#add(word) ⇒ Nodes::Node Also known as: <<
Adds a word to the trie.
30 31 32 |
# File 'lib/rambling/trie/container.rb', line 30 def add word root.add char_symbols word end |
#children ⇒ Array<Nodes::Node>
Root node’s child nodes.
149 150 151 |
# File 'lib/rambling/trie/container.rb', line 149 def children root.children end |
#children_tree ⇒ Array<Nodes::Node>
Root node’s children tree.
157 158 159 |
# File 'lib/rambling/trie/container.rb', line 157 def children_tree root.children_tree end |
#compress ⇒ Container
Compresses the existing trie using redundant node elimination. Returns a new trie with the compressed root.
60 61 62 63 |
# File 'lib/rambling/trie/container.rb', line 60 def compress return self if root.compressed? Rambling::Trie::Container.new compress_root, compressor end |
#compress! ⇒ Container
This method replaces the root Raw node with a Compressed version of it.
Compresses the existing trie using redundant node elimination. Marks the trie as compressed. Does nothing if the trie has already been compressed.
50 51 52 53 |
# File 'lib/rambling/trie/container.rb', line 50 def compress! self.root = compress_root unless root.compressed? self end |
#compressed? ⇒ Boolean
Indicates if the root Node can be compressed or not.
165 166 167 |
# File 'lib/rambling/trie/container.rb', line 165 def compressed? root.compressed? end |
#concat(words) ⇒ Array<Nodes::Node>
Adds all provided words to the trie.
40 41 42 |
# File 'lib/rambling/trie/container.rb', line 40 def concat words words.map { |word| add word } end |
#each {|String| ... } ⇒ Object
Iterates over the words contained in the trie.
124 125 126 127 128 129 130 |
# File 'lib/rambling/trie/container.rb', line 124 def each return enum_for :each unless block_given? root.each do |word| yield word end end |
#inspect ⇒ String
Returns a string representation of the container.
133 134 135 |
# File 'lib/rambling/trie/container.rb', line 133 def inspect "#<#{self.class.name} root: #{root.inspect}>" end |
#key?(letter) ⇒ Boolean Also known as: has_key?, has_letter?
Check if a letter is part of the root Nodes::Node‘s children tree.
181 182 183 |
# File 'lib/rambling/trie/container.rb', line 181 def key? letter root.key? letter end |
#partial_word?(word = '') ⇒ Boolean Also known as: match?
Checks if a path for a word or partial word exists in the trie.
71 72 73 |
# File 'lib/rambling/trie/container.rb', line 71 def partial_word? word = '' root.partial_word? word.chars end |
#scan(word = '') ⇒ Array<String> Also known as: words
Returns all words that start with the specified characters.
91 92 93 |
# File 'lib/rambling/trie/container.rb', line 91 def scan word = '' root.scan(word.chars).to_a end |
#size ⇒ Integer
Size of the Root Node‘s children tree.
187 188 189 |
# File 'lib/rambling/trie/container.rb', line 187 def size root.size end |
#to_a ⇒ Array<String>
Array of words contained in the root Node.
173 174 175 |
# File 'lib/rambling/trie/container.rb', line 173 def to_a root.to_a end |
#word?(word = '') ⇒ Boolean Also known as: include?
Checks if a whole word exists in the trie.
81 82 83 |
# File 'lib/rambling/trie/container.rb', line 81 def word? word = '' root.word? word.chars end |
#words_within(phrase) {|String| ... } ⇒ Enumerator<String>
Returns all words within a string that match a word contained in the trie.
102 103 104 |
# File 'lib/rambling/trie/container.rb', line 102 def words_within phrase words_within_root(phrase).to_a end |
#words_within?(phrase) ⇒ Boolean
Checks if there are any valid words in a given string.
111 112 113 |
# File 'lib/rambling/trie/container.rb', line 111 def words_within? phrase words_within_root(phrase).any? end |