@@ -10,6 +10,8 @@ import (
10
10
func BuildTreeFromFiles (files []* models.File ) * Node [models.File ] {
11
11
root := & Node [models.File ]{}
12
12
13
+ childrenMapsByNode := make (map [* Node [models.File ]]map [string ]* Node [models.File ])
14
+
13
15
var curr * Node [models.File ]
14
16
for _ , file := range files {
15
17
splitPath := split (file .Name )
@@ -23,11 +25,19 @@ func BuildTreeFromFiles(files []*models.File) *Node[models.File] {
23
25
}
24
26
25
27
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
31
41
}
32
42
33
43
newChild := & Node [models.File ]{
@@ -36,6 +46,8 @@ func BuildTreeFromFiles(files []*models.File) *Node[models.File] {
36
46
}
37
47
curr .Children = append (curr .Children , newChild )
38
48
49
+ currNodeChildrenMap [path ] = newChild
50
+
39
51
curr = newChild
40
52
}
41
53
}
0 commit comments