デルファイのコレクションにランダムアクセスする - 私はその一部のアプリケーション、に取り組んでいます(意味は高度な概念は、すでに知られていることを期待していない)デルファイデザインのアイデア - 必要なデータ構造データ
- 初心者プログラマをスケジューリング機能。私は予定のグループを見る。これらの予定は特定の日付になります。私は各日付のすべての予定の統合ビューを作成する必要があります。これによって、私は1月17日についてのデータの「グループ化」を作成することを意味します。これは、開始日、停止時など、その日の予定の数になります。これは配列、クラス、この時点では分かりません。私は17日に1つを持っているかもしれませんし、次のものは22日、次に24は次の日です、そして、私は次の35日間毎日1つずつ持っているかもしれません...私は0か1の構造/ 1日あたりの容器数は3〜5ヶ月ですが、どれが存在していてどれが存在しないかは非常に流動的です。この構造は統合されたビューです。つまり、1つのアポイントメントから情報の一部を取得し、次のアポイントメントから情報の一部を取得するため、各アポイントメントを読み込んでいるので、この構造をすばやく見つける必要があります。
私はこれらの構造をメモリベースにする必要があるため、高速です。
要件 このような構造をオンザフライで作成できるようにする必要があります(たとえば、Janの予定を読んだだけです)。 22、構造を更新する必要がありますが、まだ存在していないので、その場で作成する必要があります)。
私はそれらを素早く見つける必要があります。
構造の各々は、複数のデータ型(ブール、のTDateTime、TStringListの、など)を保持する。
I HもしDelphi 2010が役に立ったら...
私はどんな構造を探していますか?すでにD2010(または無料)に同梱されている簡単で高速な操作がすべて重要です。
おかげ
GS
UPDATED INFO:
だから、使用する(私は...と思う)私が決めた ... TDictionaryまたはTObjectDictionaryが移動するための方法で表示されます私の基本情報を保持するためにレコードを作成し、これらのレコードをTDictionaryまたはTObjectDictionaryに格納します。私は両方の挑戦に走っています。 TDictionaryでは、私はそれらが(ポインタであるので)完了したときにレコードを解放する方法を理解することができず、TObjectDictionaryを使用して、レコードタイプでレコードを作成することはできません。コードサンプルが...私はTObjectDictionaryを行く場合、これは動作しません...
var
Dic : TObjectDictionary<Integer,TSummaryAppt>;
begin
Dic := TObjectDictionary<Integer,TSummaryAppt>.Create([doOwnsKeys, doOwnsValues]);
// Create the base record definition that will be put in the TObjectDictionary/TDictionary
type
TSummaryAppt = record
Date : TDate;
SA_ID : Integer;
BusyFlag : Array[1..36] of Boolean; // 15 minute periods...
PCTFree: Double;
LargestFreeMinutes : integer;
end;
ある作成ラインは無効なクラス型キャストと(細かいコンパイル)の実行に失敗しました。任意およびすべてのヘルプ感謝
var
Dic : TDictionary<Integer,TSummaryAppt>;
rec : ^TSummaryAppt;
p : TSummaryAppt;
i : Integer;
begin
Dic := TDictionary<Integer,TSummaryAppt>.Create;
// Now add some records. THese have to be created dynamically
// because I dont know at compile time how many there are.
new(rec);
rec.Date := now;
rec.SA_ID := 3;
Dic.Add(1, rec^);
new(rec);
rec^.Date := now;
rec^.SA_ID := 5;
Dic.Add(2, rec^);
new(rec);
rec^.Date := now;
rec^.SA_ID := 7;
Dic.Add(3, rec^);
// Test ...
for p in Dic.Values do begin
ShowMessage(IntToStr(p.SA_ID));
end;
// Now free everything. HERE IS WHERE I AM HAVING PROBLEMS...
// What should I be doing?
for p in Dic.values do
p.dispose;
Dic.Values.Free;
Dic.Keys.Free;
Dic.Free;
end;
....
TDictionaryは少し親しみやすいように見えますが、私は私のメモリを解放しなければなりません。私はどうしたら違うはずですか? ありがとう! GS
'TClientDataSet'を見ましたか?これはかなりメモリ内のデータベース(必要に応じてファイルバックアップストレージを持つことができます)、基本的に任意のデータ型をサポートし、インデックスをサポートしています。 –
質問に対するあなたの編集は完全に不適切です。それは新しい質問であるはずです。それはレコードを割り当てるために 'New'を使うべきではないということを私はあなたに伝えることができます。辞書に「追加」をすると、レコードのコピーが作成されます。したがって、レコード型のローカル変数を使用し、そのローカルをローカルに渡すことを呼び出すことができます。とにかく、ここで編集を元に戻して、辞書の使用に関する具体的なヘルプが必要な場合は新しい質問をしてください。この提案には –