Use map to quickly find children in BuildTreeFromFiles

This commit is contained in:
partho.kunda 2024-09-18 03:11:54 +06:00 committed by Stefan Haller
parent c67979abbb
commit b18f12ca0f

View file

@ -10,6 +10,8 @@ import (
func BuildTreeFromFiles(files []*models.File) *Node[models.File] {
root := &Node[models.File]{}
childrenMapsByNode := make(map[*Node[models.File]]map[string]*Node[models.File])
var curr *Node[models.File]
for _, file := range files {
splitPath := split(file.Name)
@ -23,11 +25,19 @@ func BuildTreeFromFiles(files []*models.File) *Node[models.File] {
}
path := join(splitPath[:i+1])
for _, existingChild := range curr.Children {
if existingChild.Path == path {
curr = existingChild
continue outer
var currNodeChildrenMap map[string]*Node[models.File]
var isCurrNodeMapped bool
if currNodeChildrenMap, isCurrNodeMapped = childrenMapsByNode[curr]; !isCurrNodeMapped {
currNodeChildrenMap = make(map[string]*Node[models.File])
childrenMapsByNode[curr] = currNodeChildrenMap
}
child, doesCurrNodeHaveChildAlready := currNodeChildrenMap[path]
if doesCurrNodeHaveChildAlready {
curr = child
continue outer
}
newChild := &Node[models.File]{
@ -36,6 +46,8 @@ func BuildTreeFromFiles(files []*models.File) *Node[models.File] {
}
curr.Children = append(curr.Children, newChild)
currNodeChildrenMap[path] = newChild
curr = newChild
}
}