背景
我正在处理的应用程序有一个大菜单。但是,它们没有排序。这是由以前的开发人员构建的。现在我被要求以正确的顺序制作菜单。
菜单包含很多项目。每个项目都有子菜单。子菜单也可以有自己的子菜单。 以下是一个例子。
根据现有程序,给出了以下项目数组。 (菜单是基于此数组创建的。)
[A,D,E,B,C,F,H,G]
您可以看到父节点后跟其子节点,然后是兄弟节点。
我的想法:
我有两种方法。一种是更改现有程序,以便它首先以正确的顺序输出数组。其次是对现有程序生成的数组进行排序。为了不搞乱现有的功能。我更喜欢第二种方式,即改变生成的数组的顺序。
我的问题:
因此,我想对数组进行排序,使其看起来像
[A,B,C,d,E,F,G,H]
这样最终的菜单如下所示:
我们非常感谢所提供的任何代码。我正在使用Java,但也欢迎任何其他语言或伪代码。
更新
对不起,我没有说清楚。我试图让问题变得简单,这样你就不需要知道太多无用和分散注意力的信息。不知怎的,我错过了一些你可能需要知道的重要信息。
以下是我需要了解的更多信息。
数组中的项是Object。该对象具有菜单级别和父ID。
例如,
我希望此更新可以帮助您更多地了解我的问题。
答案 0 :(得分:0)
由于它是一个类似树的结构,你可以利用自定义比较函数来利用它,并执行以下操作:
(类似Python的伪代码)
'''
Assuming Menu is defined or can be transformed to be as follows:
class Menu():
#submenus is a list of menus under a menu
def __init__(submenus):
self.submenus = submenus
# other menu members
'''
# menus is a list of top level menu items.
# cmp is the comparison fxn for two menus
def sort_menus(menus,cmp)
all_sorted_menus = []
sort_menus_helper(menus,cmp,all_sorted_menus)
return all_sorted_menus
def sort_menus_helper(menus,cmp,all_sorted_menus=None):
if all_sorted_menus is None:
all_sorted_menus = []
sorted_menus = menus.sort(cmp=cmp)
for menu in menus:
sorted_menus.append(menu)
sort_menus(menu.submenus,cmp,all_sorted_menus)