Турбо Паскаль 6.0

Создание коллекции.


Создать коллекцию так же просто, как определить тип данных, который Вы хотите хранить. Предположим, что Вы консультант и хотите хранить и использовать табельный номер, имя и номер телефона каждого из Ваших клиентов. Для начала определите объект клиента (TClient), который будет храниться в коллекции:

{Не забудьте определить указатель на каждый новый тип объекта} type PClient = ^TClient; TClient = object(TObject) Account, Name, Phone: PString; constructor Init(NewAccount, NewName, NewPhone: String); destructor Done; virtual; end;

Затем Вы реализуете методы Init и Done для распределения и освобождения данных клиента. Заметим, что поля объекта типа PString, так что память распределяется только под используемую часть строки. Функции NewStr и DisposeStr обрабатывают динамические строки очень эффективно.

constructor TClient.Init(NewAccount, NewName, NewPhone: String); begin Account := NewStr(NewAccount); Name := NewStr(NewName); Phone := NewStr(NewPhone); end;

destructor TClient.Done; begin Dispose(Account); Dispose(Name); Dispose(Phone); end;

TClient.Done вызывается автоматически для каждого клиента при удалении всей коллекции. Сейчас Вы создадите коллекцию для хранения Ваших клиентов и вставите записи клиентов в нее. Тело главной программы:

{ TVGUID17.PAS } var ClientList: PCollection;

begin ClientList := New(PCollection, Init(50, 10)); with ClientList^ do begin Insert(New(PClient, Init('90-167', 'Smith, Zelda', '(800) 555-1212'))); Insert(New(PClient, Init('90-160', 'Johnson, Agatha', '(302) 139-8913'))); Insert(New(PClient, Init('90-177', 'Smitty, John', '(406) 987-4321'))); Insert(New(PClient, Init('90-160', 'Anders Smitty', '(406) 111-2222'))); end; PrintAll(ClientList); SearchPhone(ClientList, '(406)'); Dispose(ClientList, Done); end.

Заметьте как легко создать коллекцию. Первый оператор распределяет новую TCollection с именем ClientList, который имеет начальный размер 50 клиентов. Если в ClientList вставлено более 50 клиентов, ее размер увеличивается с шагом 10 клиентов. 2 последних оператора создают новый объект клиента и вставляют его в коллекцию. Dispose освобождает всю коллекцию. Вы нигде не говорили коллекции, какого вида данные она будет хранить - ей только передан указатель.



Содержание раздела