@@ -81,23 +81,19 @@ extension Trie {
81
81
return
82
82
}
83
83
var currentNode = root
84
- let charactersInWord = Array ( word. lowercased ( ) . characters)
85
- var index = 0
86
- while index < charactersInWord. count {
87
- let character = charactersInWord [ index]
84
+ for character in word. lowercased ( ) . characters {
88
85
if let childNode = currentNode. children [ character] {
89
86
currentNode = childNode
90
87
} else {
91
88
currentNode. add ( value: character)
92
89
currentNode = currentNode. children [ character] !
93
90
}
94
- index += 1
95
91
}
96
92
// Word already present?
97
93
guard !currentNode. isTerminating else {
98
94
return
99
95
}
100
- self . wordCount += 1
96
+ wordCount += 1
101
97
currentNode. isTerminating = true
102
98
}
103
99
@@ -110,13 +106,13 @@ extension Trie {
110
106
return false
111
107
}
112
108
var currentNode = root
113
- let charactersInWord = Array ( word. lowercased ( ) . characters)
114
- var index = 0
115
- while index < charactersInWord . count , let childNode = currentNode . children [ charactersInWord [ index ] ] {
116
- index += 1
109
+ for character in word. lowercased ( ) . characters {
110
+ guard let childNode = currentNode . children [ character ] else {
111
+ return false
112
+ }
117
113
currentNode = childNode
118
114
}
119
- return index == charactersInWord . count && currentNode. isTerminating
115
+ return currentNode. isTerminating
120
116
}
121
117
122
118
/// Attempts to walk to the terminating node of a word. The
@@ -127,20 +123,15 @@ extension Trie {
127
123
/// search failed.
128
124
private func findTerminalNodeOf( word: String ) -> Node ? {
129
125
var currentNode = root
130
- var charactersInWord = Array ( word. lowercased ( ) . characters)
131
- var index = 0
132
- while index < charactersInWord. count {
133
- let character = charactersInWord [ index]
126
+ for character in word. lowercased ( ) . characters {
134
127
guard let childNode = currentNode. children [ character] else {
135
128
return nil
136
129
}
137
130
currentNode = childNode
138
- index += 1
139
131
}
140
132
return currentNode. isTerminating ? currentNode : nil
141
133
}
142
134
143
-
144
135
/// Deletes a word from the trie by starting with the last letter
145
136
/// and moving back, deleting nodes until either a non-leaf or a
146
137
/// terminating node is found.
@@ -180,7 +171,7 @@ extension Trie {
180
171
} else {
181
172
terminalNode. isTerminating = false
182
173
}
183
- self . wordCount -= 1
174
+ wordCount -= 1
184
175
}
185
176
186
177
/// Returns an array of words in a subtrie of the trie
@@ -198,7 +189,7 @@ extension Trie {
198
189
if rootNode. isTerminating {
199
190
subtrieWords. append ( previousLetters)
200
191
}
201
- for (_ , childNode) in rootNode. children {
192
+ for childNode in rootNode. children. values {
202
193
let childWords = wordsInSubtrie ( rootNode: childNode, partialWord: previousLetters)
203
194
subtrieWords += childWords
204
195
}
0 commit comments