質問

ユーザーがディレクトリ(Windowsではなくアプリ内)を作成するプログラムを作成しています。これらのフォルダーにはサブフォルダーなどがあります。すべてのフォルダーには、フォルダーまたはドキュメントのいずれかが含まれている必要があります。使用するのに最適なデータ構造は何ですか?ユーザーがサブフォルダーを選択し、その中およびそのサブフォルダー内のドキュメントを検索できることに注意してください。また、フォルダーまたはサブフォルダーのレベルを制限したくありません。

役に立ちましたか?

解決

これは私がしていることです:

データベースのすべてのレコードには、IDとParentIDの2つのフィールドがあります。 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フィールドのサイズに制限されることです。

他のヒント

これを構造化する方法はいくつか考えられますが、明白なものに勝るものはありません。

実際のファイルシステムを使用します。

B +ツリーをお勧めします....インデックス(ページ、フォルダなど)とすべてを簡単に使用できます。

B +ツリーhttp://commons.wikimedia.org/wiki/File:Btree .png

詳細情報: http://ozark.hendrix.edu/~burch/ cs / 340 / reading / btree / index.html

質問がデータ構造を具体的に求めていることを知っていますが、...

オブジェクト指向言語を使用している場合、このタイプの階層ツリー構造に最適な複合設計パターンを使用できます。求めているものが得られます。

ほとんどのOO言語には、ファイルシステムの抽象化が含まれているため、どこから始めればよいかがわかります。必要に応じてサブクラス化します。

たとえば、ディレクトリはディレクトリまたはファイルであるオブジェクトの配列として期待されます。

m-wayツリーデータ構造を使用できます

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top