, . Aasmund Eldhuset .
, - , O(n):
void AssignChildrenAndParent(IEnumerable<Group> groups)
{
var groupById=new Dictionary<GroupId,Group>();
foreach(Group group in groups)
{
groupById.Add(group.Id,group);
}
foreach(Group group in groups)
{
Group parent=groupsById(group.ParentId);
group.Parent=parent;
parent.Children.Add(group);
}
}
, , , .
, , ( O (n), ):
private void AddChildren(Group group, IEnumerable<Group> groups)
{
var children=groups.ToLookup(group=>group.ParentId);
AddChildren(group, groups, lookup);
}
private void AddChildren(Group group, IEnumerable<Group> groups,Lookup<GroupId,Group> lookup)
{
foreach (var g in lookup[group.Id])
{
g.Parent = group;
group.Children.Add(g);
AddChildren(g, groups,lookup);
}
}