0

これはとてもシンプルに聞こえますが、タマネギのようなものです。皮をむくとたくさんの層ができます。私は独自のオブジェクト クラスの階層を持っています。これはフォーム上のコンポーネントに少し似ていますが、どのコンポーネントも子と親を持つことができます。上部にルート オブジェクトがあります。他のコードがこの階層を管理しており、ブランチまたはリーフがいつでも作成、削除、または名前変更される可能性があります。この階層のビューを提供するツリー ビュー (何らかの種類、おそらく仮想) が必要です。これらのツリー ビューを複数持つことができ、それぞれが必要に応じてオブジェクト階層から自分自身を描画します。

私はすでに Delphi の TTreeView を使用したソリューションを持っていますが、「変更済み」フラグが発生したときに階層を反復処理し、変更されたツリー ビュー ブランチを再構築することに依存しています。これは遅い (1000 以上のオブジェクトを持つことができる) ため、1 つのオブジェクトの挿入または削除に対して 1 つのツリー ビューの変更を管理するアルゴリズムが必要です。

これは可能ですか?

4

1 に答える 1

1

オブジェクトが挿入または削除されたことを確実に検出し、必要な変更を加えることができます。

たとえば、削除の場合、削除されたオブジェクトに関連付けられているノードを見つけてから削除します。挿入の場合は、親に関連付けられているオブジェクトを見つけて、適切な場所に新しいノードを挿入します。

オブジェクトに関連付けられたノードを見つけるためにツリーをたどる際にパフォーマンス上の問題がある場合は、ディクショナリを使用できます。

仮想ツリー ビューの場合は、ツリー ビューにオブジェクト構造を反映させるだけなので簡単です。変更が加えられたときに更新をリクエストすると、すべてが自然に行われます。

于 2011-05-08T19:10:11.747 に答える