递归地加快动态菜单的创建

时间:2019-12-02 11:07:44

标签: c# algorithm

我具有以下菜单结构

A
-B
-C
D
-E
--F

以此类推。 A有孩子B, CD有孩子E,而E有孩子F

我创建了一种递归呈现菜单的方法。 但是由于某种原因(我不知道),它变得非常慢

A, D = parent nodes, with parent = null

这是我的程序

1.获取所有父节点的值为parent = null,在这种情况下为A和D。

2.对于每个人,检查他们是否有孩子。

2.1如果他们有孩子,请让孩子在1上进行遍历

2.2如果他们没有孩子,只需打印它们,然后转到下一项。

我可以对此应用某种形式的记忆吗?

这是C#代码

allMenus是所有可能的菜单。

@helper renderTree(IEnumerable<Menu> menus, IEnumerable<Menu> allMenus)
        {
            foreach (var item in menus)
            {
                var result = item.MenuName;

                //if has childs
                if (allMenus.Where(m => m.ParentID == item.MenuID).Any())
                {
                    <li class="treeview">
                        <a href="#">
                            <i class="@item.IconName"></i>
                            <span>
                                @{
                                    @Html.Raw(result);

                                }
                            </span>
                            <i class="fa fa-angle-left pull-right"></i>
                            <ul class="treeview-menu">
                                @{
                                    // get the childs
                                    var childs = allMenus.Where(m => m.ParentID == item.MenuID); 
                                    @renderTree(childs, allMenus);
                                }
                            </ul>
                        </a>
                    </li>
                }
                else
                {
                    <li>
                        <a href="@Url.Action(@item.ActionName, @item.ControllerName, new { area = @item.AreaName }, null)">
                            <i class="@item.IconName"></i>
                            <span>@Html.Raw(result)</span>
                        </a>
                    </li>
                }
            }
        }

0 个答案:

没有答案