Allow sorting nodes in trees

This commit is contained in:
Alexander Neumann 2017-06-10 22:55:12 +02:00
parent a4577769ae
commit 3f6e11d26e
2 changed files with 14 additions and 0 deletions

View File

@ -53,6 +53,13 @@ type Node struct {
Path string `json:"-"`
}
// Nodes is a slice of nodes that can be sorted.
type Nodes []*Node
func (n Nodes) Len() int { return len(n) }
func (n Nodes) Less(i, j int) bool { return n[i].Name < n[j].Name }
func (n Nodes) Swap(i, j int) { n[i], n[j] = n[j], n[i] }
func (node Node) String() string {
switch node.Type {
case "file":

View File

@ -71,6 +71,13 @@ func (t Tree) binarySearch(name string) (int, *Node, error) {
return pos, nil, errors.New("named node not found")
}
// Sort sorts the nodes by name.
func (t *Tree) Sort() {
list := Nodes(t.Nodes)
sort.Sort(list)
t.Nodes = list
}
// Subtrees returns a slice of all subtree IDs of the tree.
func (t Tree) Subtrees() (trees IDs) {
for _, node := range t.Nodes {