Delphi - программист NOVICE - (то есть не ожидайте, что продвинутые концепции уже известны)
Я работаю над приложением, частью которого является функция планирования. Я смотрю на группу встреч. Эти встречи назначаются на конкретную дату. Мне нужно создать сводный обзор всех встреч на каждую дату. Под этим я подразумеваю, что я создаю «группировку» данных о 17 января, это будет количество встреч на эту дату, когда они начинаются, когда они останавливаются и т. Д. Это может быть массив, запись, класс, не знаю, на данный момент. У меня может быть один для 17-го, затем следующий для 22-го, затем следующий для 24-го, и затем у меня может быть один каждый день в течение следующих 35 дней ... У меня будет 0 или 1 структура / контейнеров в день, и я вижу, что таких месяцев от 3 до 5 месяцев ... Какие существуют, а какие нет, будут очень текучими. Эта структура представляет собой консолидированное представление, означающее, что я получаю некоторую информацию от одной встречи, а затем некоторую информацию от следующей встречи, поэтому, поскольку я читаю каждую встречу, мне нужно быстро найти эту структуру.
Мне нужно, чтобы эти структуры основывались на памяти, чтобы они были быстрыми. Они МОГУТ быть разных размеров (в зависимости от количества встреч в этот день.
ТРЕБОВАНИЯ
Итак, мне нужно иметь возможность создавать эти структуры на лету. (например, я только что прочитал встречу на 22 января, и мне нужно обновить структуру, но она еще не существует, поэтому мне нужно сделать это на лету).
Мне нужно быстро их найти. (Возможно хэш на TDate).
Каждая из структур будет содержать несколько типов данных (логическое значение, TDateTime, TStringlist и т. Д.).
У меня Delphi 2010, если это поможет ...
Какую структуру я ищу? Легко, быстро, уже включено в D2010 (или бесплатно) - все это важно.
Спасибо
GS
ОБНОВЛЕННАЯ ИНФОРМАЦИЯ:
Так что, похоже, TDictionary или TObjectDictionary - это то, что нужно ...
Я решил (я думаю ...) использовать запись для хранения моей базовой информации, а затем сохранить эти записи в TDictionary или TObjectDictionary. Я сталкиваюсь с проблемой в обоих из них. В TDictionary я не могу понять, как освободить записи, когда я закончу с ними (так как они являются указателями), а с TObjectDictionary я не могу создать его с типом записи ... Любая помощь приветствуется. Примеры кода ...
// 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;
Если я пойду в TObjectDictionary, это не будет работать ...
var
Dic : TObjectDictionary<Integer,TSummaryAppt>;
begin
Dic := TObjectDictionary<Integer,TSummaryAppt>.Create([doOwnsKeys, doOwnsValues]);
Строка Create завершается неудачно при выполнении (прекрасно компилируется) с Invalid Class Typecast.
TDictionary выглядит немного дружелюбнее, но я должен освободить память ....
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;
Любая помощь приветствуется. Что я должен делать по-другому?
Спасибо!
GS