Skip to content

Commit b18f12c

Browse files
parthokundastefanhaller
authored andcommitted
Use map to quickly find children in BuildTreeFromFiles
1 parent c67979a commit b18f12c

File tree

1 file changed

+17
-5
lines changed

1 file changed

+17
-5
lines changed

Diff for: pkg/gui/filetree/build_tree.go

+17-5
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import (
1010
func BuildTreeFromFiles(files []*models.File) *Node[models.File] {
1111
root := &Node[models.File]{}
1212

13+
childrenMapsByNode := make(map[*Node[models.File]]map[string]*Node[models.File])
14+
1315
var curr *Node[models.File]
1416
for _, file := range files {
1517
splitPath := split(file.Name)
@@ -23,11 +25,19 @@ func BuildTreeFromFiles(files []*models.File) *Node[models.File] {
2325
}
2426

2527
path := join(splitPath[:i+1])
26-
for _, existingChild := range curr.Children {
27-
if existingChild.Path == path {
28-
curr = existingChild
29-
continue outer
30-
}
28+
29+
var currNodeChildrenMap map[string]*Node[models.File]
30+
var isCurrNodeMapped bool
31+
32+
if currNodeChildrenMap, isCurrNodeMapped = childrenMapsByNode[curr]; !isCurrNodeMapped {
33+
currNodeChildrenMap = make(map[string]*Node[models.File])
34+
childrenMapsByNode[curr] = currNodeChildrenMap
35+
}
36+
37+
child, doesCurrNodeHaveChildAlready := currNodeChildrenMap[path]
38+
if doesCurrNodeHaveChildAlready {
39+
curr = child
40+
continue outer
3141
}
3242

3343
newChild := &Node[models.File]{
@@ -36,6 +46,8 @@ func BuildTreeFromFiles(files []*models.File) *Node[models.File] {
3646
}
3747
curr.Children = append(curr.Children, newChild)
3848

49+
currNodeChildrenMap[path] = newChild
50+
3951
curr = newChild
4052
}
4153
}

0 commit comments

Comments
 (0)