我正在创建一个用户构建目录的程序(不在Windows中,在我的应用程序中),在这些文件夹中有子文件夹等等;每个文件夹必须包含文件夹或文档。什么是最好的数据结构?请注意,用户可以选择子文件夹并在其子文件夹中搜索文档。我不想限制文件夹或子文件夹级别。
答案 0 :(得分:13)
这就是我的所作所为:
数据库中的每条记录都有两个字段:ID和ParentID。 ID为4-5个字符(Base36,a-z:0-9或类似的东西)。父ID是父级完整结构的串联...
因此...
这个结构:
Root
Folder1
Folder2
Folder3
Folder4
Folder5
Folder6
将表示如下:
ID ParentID Name
0000 NULL ROOT
0001 0000 Folder1
0002 0000 Folder2
0003 00000002 Folder3
0004 0000 Folder4
0005 00000004 Folder5
0006 000000040005 Folder6
我喜欢这种结构,因为如果我需要查找文件夹下的所有文件,我可以进行如下查询:
SELECT * FROM Folders WHERE ParentID LIKE '0000%' -- to find all folders under Folder1
删除文件夹及其所有子文件:
DELETE FROM Folders WHERE ID='0004' AND ParentID LIKE '00000004%'
要移动文件夹及其子项,您必须将使用同一父项的所有记录更新为新父项。
我不想让文件夹或子文件夹级别
一个明显的限制是子文件夹的数量限制为您的ParentID字段的大小。
答案 1 :(得分:8)
我可以想到一些方法可以解决这个问题,但没有什么比这更明显了:
使用实际的文件系统。
答案 2 :(得分:5)
我会考虑使用某种tree data structure
答案 3 :(得分:1)
我应该推荐B + Tree ....您可以轻松使用索引(页面,文件夹等)和所有。
B+ Tree http://commons.wikimedia.org/wiki/File:Btree.png
了解更多信息: http://ozark.hendrix.edu/~burch/cs/340/reading/btree/index.html
答案 4 :(得分:0)
我知道问题是专门要求数据结构但是......
如果您使用的是面向对象语言,则可以使用复合设计模式,该模式非常适合这种类型的分层树状结构。你得到了你想要的东西。
答案 5 :(得分:0)
大多数OO语言都为文件系统提供了某种抽象,因此我可以从那里开始。然后,如果需要,则将其子类化。
我希望将目录作为目录或文件的对象数组,例如。
答案 6 :(得分:0)
您可以使用m-way树数据结构