以下是一个将扁平化的目录表转换为嵌套数组的解决方法的代码示例:
def create_nested_array(directories):
nested_array = []
for directory in directories:
path = directory['path']
parts = path.split('/')
current_level = nested_array
for part in parts:
existing_dir = next((d for d in current_level if d['name'] == part), None)
if existing_dir:
current_level = existing_dir['children']
else:
new_dir = {'name': part, 'children': []}
current_level.append(new_dir)
current_level = new_dir['children']
return nested_array
使用示例:
directories = [
{'path': 'root/dir1/dir2/file1.txt'},
{'path': 'root/dir1/file2.txt'},
{'path': 'root/file3.txt'},
{'path': 'root/dir1/file4.txt'},
{'path': 'root/dir3/file5.txt'}
]
nested_array = create_nested_array(directories)
print(nested_array)
输出:
[
{
'name': 'root',
'children': [
{
'name': 'dir1',
'children': [
{
'name': 'dir2',
'children': [
{
'name': 'file1.txt',
'children': []
}
]
},
{
'name': 'file2.txt',
'children': []
},
{
'name': 'file4.txt',
'children': []
}
]
},
{
'name': 'file3.txt',
'children': []
},
{
'name': 'dir3',
'children': [
{
'name': 'file5.txt',
'children': []
}
]
}
]
}
]
这段代码首先创建一个空的嵌套数组 nested_array
。然后遍历给定的目录表中的每个目录。对于每个目录,它将路径分割为部分,并使用一个循环来迭代每个部分。对于每个部分,它检查当前层级中是否已经存在一个具有相同名称的目录。如果存在,则将当前层级更新为该目录的 children
,否则创建一个新的目录并将其添加到当前层级的 children
中。最后返回嵌套数组 nested_array
。