0%

Tree Builder

T1.Standard.Collections.TreeBuilder

ReduceTree

Universal way to convert List of items to Tree, Build the tree as completely as possible

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
var userList = new[]
{
new MyUser { Path = "", Name = "A1" },
new MyUser { Path = "", Name = "A2" },
new MyUser { Path = "demo", Name = "B1" }
};

var actual = _treeBuilder.ReduceTree(userList,
x => x.Path,
x => _treeBuilder.GetParentPath(x),
x => _treeBuilder.QueryParentPaths(x.Path)
).ToList();

var expected = new List<TreeBuilder.TreeItem<MyUser, string>>
{
new TreeBuilder.TreeItem<MyUser, string>()
{
Id = "",
ParentId = null,
Item = new MyUser {Path = "", Name = "A1"},
Children = new List<TreeBuilder.TreeItem<MyUser, string>>()
},
new TreeBuilder.TreeItem<MyUser, string>()
{
Id = "",
ParentId = null,
Item = new MyUser {Path = "", Name = "A2"},
Children = new List<TreeBuilder.TreeItem<MyUser, string>>()
},
new TreeBuilder.TreeItem<MyUser, string>()
{
Id = "demo",
ParentId = null,
Item = new MyUser {Path = "demo", Name = "B1"},
Children = new List<TreeBuilder.TreeItem<MyUser, string>>()
},
};

expected.ToExpectedObject().ShouldEqual(actual);

GenerateTree

This will only create a fully structured tree

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var userList = new[]
{
new MyUser {Path = "", Name = "A1"},
new MyUser {Path = "demo/name", Name = "C1"},
};

var actual = _treeBuilder.GenerateTree(userList,
x => x.Path,
x => _treeBuilder.GetParentPath(x.Path)
).ToList();

var expected = new List<TreeBuilder.TreeItem<MyUser, string>>
{
new TreeBuilder.TreeItem<MyUser, string>()
{
Id = "",
ParentId = null,
Item = new MyUser {Path = "", Name = "A1"},
Children = new List<TreeBuilder.TreeItem<MyUser, string>>()
},
};

expected.ToExpectedObject().ShouldEqual(actual);