Class: Rambling::Trie::Nodes::Node
- Inherits:
-
Object
- Object
- Rambling::Trie::Nodes::Node
- Includes:
- Comparable, Compressible, Enumerable, Inspectable, Stringifyable
- Defined in:
- lib/rambling/trie/nodes/node.rb
Overview
A representation of a node in the trie data structure.
Direct Known Subclasses
Instance Attribute Summary collapse
-
#children_tree ⇒ Hash<Symbol, Node>
Child nodes tree.
-
#letter ⇒ Symbol?
The corresponding letter(s).
-
#parent ⇒ Node?
Parent node.
Instance Method Summary collapse
-
#[](letter) ⇒ Node
Get Node corresponding to a given letter.
-
#[]=(letter, node) ⇒ Node
Set the Node that corresponds to a given letter.
-
#children ⇒ Array<Node>
Child nodes.
- #delete(letter) ⇒ Node
-
#first_child ⇒ Node?
First child node.
-
#initialize(letter = nil, parent = nil, children_tree = {}) ⇒ Node
constructor
Creates a new node.
-
#key?(letter) ⇒ Boolean
(also: #has_key?)
Check if a Node‘s children tree contains a given letter.
-
#match_prefix(chars) {|String| ... } ⇒ Enumerator<String>
Returns all words that match a prefix of any length within chars.
-
#partial_word?(chars) ⇒ Boolean
Checks if a path for a set of characters exists in the trie.
-
#root? ⇒ Boolean
Indicates if the current node is the root node.
-
#scan(chars) ⇒ Node
Returns the node that starts with the specified characters.
-
#terminal! ⇒ self
Mark Node as terminal.
-
#terminal? ⇒ Boolean
Indicates if a Node is terminal or not.
-
#word?(chars = []) ⇒ Boolean
Checks if a path for set of characters represents a word in the trie.
Methods included from Inspectable
Methods included from Stringifyable
Methods included from Comparable
Methods included from Enumerable
Methods included from Compressible
Constructor Details
#initialize(letter = nil, parent = nil, children_tree = {}) ⇒ Node
Creates a new node.
35 36 37 38 39 |
# File 'lib/rambling/trie/nodes/node.rb', line 35 def initialize letter = nil, parent = nil, children_tree = {} @letter = letter @parent = parent @children_tree = children_tree end |
Instance Attribute Details
#children_tree ⇒ Hash<Symbol, Node>
Child nodes tree.
26 27 28 |
# File 'lib/rambling/trie/nodes/node.rb', line 26 def children_tree @children_tree end |
#letter ⇒ Symbol? #letter=(letter) ⇒ Symbol?
Returns the corresponding letter(s).
22 23 24 |
# File 'lib/rambling/trie/nodes/node.rb', line 22 def letter @letter end |
#parent ⇒ Node?
Parent node.
30 31 32 |
# File 'lib/rambling/trie/nodes/node.rb', line 30 def parent @parent end |
Instance Method Details
#[](letter) ⇒ Node
Get Node corresponding to a given letter.
126 127 128 |
# File 'lib/rambling/trie/nodes/node.rb', line 126 def [] letter children_tree[letter] end |
#[]=(letter, node) ⇒ Node
Set the Node that corresponds to a given letter.
135 136 137 |
# File 'lib/rambling/trie/nodes/node.rb', line 135 def []= letter, node children_tree[letter] = node end |
#children ⇒ Array<Node>
Child nodes.
43 44 45 |
# File 'lib/rambling/trie/nodes/node.rb', line 43 def children children_tree.values end |
#delete(letter) ⇒ Node
152 153 154 |
# File 'lib/rambling/trie/nodes/node.rb', line 152 def delete letter children_tree.delete letter end |
#first_child ⇒ Node?
First child node.
49 50 51 52 53 54 55 |
# File 'lib/rambling/trie/nodes/node.rb', line 49 def first_child return if children_tree.empty? # rubocop:disable Lint/UnreachableLoop children_tree.each_value { |child| return child } # rubocop:enable Lint/UnreachableLoop end |
#key?(letter) ⇒ Boolean Also known as: has_key?
Check if a Node‘s children tree contains a given letter.
143 144 145 |
# File 'lib/rambling/trie/nodes/node.rb', line 143 def key? letter children_tree.key? letter end |
#match_prefix(chars) {|String| ... } ⇒ Enumerator<String>
Returns all words that match a prefix of any length within chars.
112 113 114 115 116 117 118 119 120 |
# File 'lib/rambling/trie/nodes/node.rb', line 112 def match_prefix chars return enum_for :match_prefix, chars unless block_given? yield as_word if terminal? children_match_prefix chars do |word| yield word end end |
#partial_word?(chars) ⇒ Boolean
Checks if a path for a set of characters exists in the trie.
83 84 85 86 87 |
# File 'lib/rambling/trie/nodes/node.rb', line 83 def partial_word? chars return true if chars.empty? partial_word_chars? chars end |
#root? ⇒ Boolean
Indicates if the current node is the root node.
59 60 61 |
# File 'lib/rambling/trie/nodes/node.rb', line 59 def root? !parent end |
#scan(chars) ⇒ Node
Returns the node that starts with the specified characters.
102 103 104 105 106 |
# File 'lib/rambling/trie/nodes/node.rb', line 102 def scan chars return self if chars.empty? closest_node chars end |
#terminal! ⇒ self
Mark Node as terminal.
71 72 73 74 |
# File 'lib/rambling/trie/nodes/node.rb', line 71 def terminal! self.terminal = true self end |
#terminal? ⇒ Boolean
Indicates if a Node is terminal or not.
65 66 67 |
# File 'lib/rambling/trie/nodes/node.rb', line 65 def terminal? !!terminal end |
#word?(chars = []) ⇒ Boolean
Checks if a path for set of characters represents a word in the trie.
92 93 94 95 96 |
# File 'lib/rambling/trie/nodes/node.rb', line 92 def word? chars = [] return terminal? if chars.empty? word_chars? chars end |