Delphi の VirtualStringTree を使用したことがある人なら誰でも、これが優れたコントロールであることに同意するでしょう。これは「仮想」コントロールです (データは別の場所に保持する必要があります) ので、そのようなタスクに最適なデータ構造を考えていました。データ構造が階層をサポートする必要があるというIMOは、高速で簡単に拡張できる必要があります。最も簡単な実装はレコードを使用することであり、それは見つけることができるほとんどのドキュメントが示唆していることです。しかし、高速なルックアップや合計の計算などを行う必要がある場合はどうすればよいでしょうか? VirtualStringTree と一緒に使用しているデータ構造は何ですか?
EDIT1 : Delphi 2010 を使用しています。
OK、私の要件についてもう少し詳しく説明します。データ サイズは、1 アイテムから数千アイテムまで非常に可変です。各アイテムは、複数の文字列、整数値を保持できます。ランダム アクセスが必要です。データは、アプリケーションの有効期間中に何度も変更される可能性があります。優れたパフォーマンスは非常に望ましいものです。データの保存と再読み込みも必要です。
EDIT2:1つの回答を得たので、私の意見をコメントしようと思います. Dorin さん、ご回答ありがとうございます。しかし、あなたの構造はあまり便利ではないと思います。1)階層を扱いません。2) ノードごとに個別の TStringList または TList を持つことは、あまり効果的ではありません。この実装では、現在のノードのデータしか検索できませんが、ツリー全体を効果的に検索することはできません。
このデータ構造は木のようなものでなければならないと思います。子を追加できるノードが必要です。次に、OnInitNode イベントでノードのデータを取得し、ノードに子があるかどうかを確認し、その場合は ivsHasChildren フラグを設定し、OnInitChildren イベントで正しい子の数を設定します。OnGetText イベントの後半で、必要なデータをノード構造からフェッチし、Column インデックスに基づいて CellText に設定することができました。私の考えは、別のデータ構造を持ち、必要なすべての操作を VirtualStringTree を使用せずに実行することです。誰かが私の主張を理解してくれることを願っています:)。
EDIT3:私が探しているものを達成するために一目で使用できる非常に興味深いJclTreesユニットを見つけました。JCLライブラリに属します。適切なドキュメントがないため、その機能を迅速に調査することが難しくなっています。もう少し時間があれば、もっと深く調べてみようと思います。
