From 861bbf4d7181713ec13119d87718d6ffd70d707c Mon Sep 17 00:00:00 2001 From: "partho.kunda" Date: Mon, 16 Sep 2024 01:37:53 +0600 Subject: [PATCH] Use map to quickly find childrens in BuildTreeFromFiles --- pkg/gui/filetree/build_tree.go | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/pkg/gui/filetree/build_tree.go b/pkg/gui/filetree/build_tree.go index c7c465e28e8..926c5ea04a3 100644 --- a/pkg/gui/filetree/build_tree.go +++ b/pkg/gui/filetree/build_tree.go @@ -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,19 +25,28 @@ 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 childrenMap map[string]*Node[models.File] + var ok bool + if childrenMap, ok = childrenMapsByNode[curr]; !ok { + childrenMap = make(map[string]*Node[models.File]) + childrenMapsByNode[curr] = childrenMap + } + child, isFound := childrenMap[path] + if isFound { + curr = child + continue outer } newChild := &Node[models.File]{ Path: path, File: setFile, } + curr.Children = append(curr.Children, newChild) + childrenMap[path] = newChild + curr = newChild } }