okay trietrstingview search is pretty good

This commit is contained in:
neon443
2025-11-03 17:47:26 +00:00
parent 72a9bb2933
commit caedb16ef5
2 changed files with 22 additions and 13 deletions

View File

@@ -81,7 +81,7 @@ class Trie: ObservableObject {
struct TrieTestingView: View { struct TrieTestingView: View {
@ObservedObject var hoarder: EmojiHoarder = EmojiHoarder(localOnly: true) @ObservedObject var hoarder: EmojiHoarder = EmojiHoarder(localOnly: true)
@ObservedObject var trie: Trie = Trie() // @ObservedObject var trie: Trie = Trie()
@State var id: UUID = UUID() @State var id: UUID = UUID()
@@ -96,14 +96,16 @@ struct TrieTestingView: View {
var body: some View { var body: some View {
VStack { VStack {
Button("reset", role: .destructive) { Button("reset", role: .destructive) {
trie.root = TrieNode() hoarder.trie.root = TrieNode()
} }
Button("add emojis!") { Button("add emojis!") {
let start = Date().timeIntervalSince1970 hoarder.buildTrie()
for emoji in hoarder.emojis { // let start = Date().timeIntervalSince1970
trie.insert(word: emoji.name, emoji: emoji) // for emoji in hoarder.emojis {
} // hoarder.trie.insert(word: emoji.name, emoji: emoji)
print("done!", Date().timeIntervalSince1970-start) // }
// hoarder.buildTrieDict()
// print("done!", Date().timeIntervalSince1970-start)
} }
.buttonStyle(.borderedProminent) .buttonStyle(.borderedProminent)
@@ -111,7 +113,7 @@ struct TrieTestingView: View {
.textFieldStyle(.roundedBorder) .textFieldStyle(.roundedBorder)
.border(.orange) .border(.orange)
.onChange(of: searchTerm) { _ in .onChange(of: searchTerm) { _ in
searchStatus = trie.search(for: searchTerm) searchStatus = hoarder.trie.search(for: searchTerm)
} }
if let searchStatus { if let searchStatus {
Circle() Circle()
@@ -123,21 +125,28 @@ struct TrieTestingView: View {
.textFieldStyle(.roundedBorder) .textFieldStyle(.roundedBorder)
.border(.orange) .border(.orange)
.onChange(of: filterTerm) { _ in .onChange(of: filterTerm) { _ in
withAnimation { filterResult = trie.search(prefix: filterTerm) } withAnimation { filterResult = hoarder.trie.search(prefix: filterTerm) }
} }
Text("\(filterResult.count)") Text("\(filterResult.count)")
.modifier(numericTextCompat()) .modifier(numericTextCompat())
List(filterResult, id: \.self) { item in List(filterResult, id: \.self) { item in
Text(item) Text(item)
HStack {
AsyncImage(url: hoarder.trie.dict[item]!.localImageURL)
.frame(width: 20, height: 20)
AsyncImage(url: hoarder.trie.dict[item]!.remoteImageURL)
.frame(width: 20, height: 20)
}
} }
Text("\(trie.root.children.count)") Text("\(hoarder.trie.root.children.count)")
} }
} }
} }
struct TrieNodeView: View { struct TrieNodeView: View {
@ObservedObject var trie: Trie
@State var trieNode: TrieNode @State var trieNode: TrieNode
var body: some View { var body: some View {
@@ -145,8 +154,8 @@ struct TrieNodeView: View {
let node = trieNode.children[key]! let node = trieNode.children[key]!
Text(String(key)) Text(String(key))
.foregroundStyle(node.isEndOfWord ? .red : .primary) .foregroundStyle(node.isEndOfWord ? .red : .primary)
.frame(width: 20, height: 20) .frame(width: 20, height: 20)
TrieNodeView(trieNode: node) TrieNodeView(trie: trie, trieNode: node)
.padding(.leading, 20) .padding(.leading, 20)
} }
} }

View File

@@ -40,7 +40,7 @@ struct ContentView: View {
} }
} }
Text("\(hoarder.filteredEmojis.count) Emoji") Text("\(searchTerm.isEmpty ? hoarder.emojis.count : hoarder.filteredEmojis.count) Emoji")
if searchTerm.isEmpty { if searchTerm.isEmpty {
ForEach($hoarder.emojis, id: \.self) { $emoji in ForEach($hoarder.emojis, id: \.self) { $emoji in