Коллекции строк
begin {PrintList}
WriteLn;
WriteLn;
List^.ForEach(@PrintWord);
WriteLn
end; {PrintList}
var
WordList: PStringCollection;
w: String;
begin {Основная программа}
if not OpenFile(w) then
WriteLn('Нельзя открыть файл '+w)
else
begin
WordList: = New(PStringCollection, Init(200.10));
repeat
w: = GetWord;
if (w < > ' ') and (MaxAvail > 255) then
WordList.Insert(NewStr(w))
until w='';
PrintList(WordList)
end
end.
Отметим, что в операторе:
if (w < > '') and (MaxAvail > 255) then
Осуществляется контроль за доступной динамической памятью. В Turbo Vision есть и встроенные способы контроля кучи – см. п. 19.6.
Как и в любой другой отсортированной коллекции, в коллекции строк по умолчанию хранятся элементы с уникальными ключевыми полями. Чтобы подавить контроль за уникальностью строк, добавьте оператор:
WordList.Duplicates: = True;
Сразу за оператором создания коллекции:
WordList: = New(PStringCollection, Init(200.10));
И сделайте еще один прогон программы, – Вы увидите, как много раз встречается в файле одно и то же слово.
Метод TStringCollection.Compare следует перекрыть, если Вы хотите осуществить свой способ сортировки строк. Например, используя объект:
type PStrSor =TStrSor; TStrSor = object (TStringCollection) Function Compare(k1, k2: Pointer): Integer; Virtual; end; Function TStrSor.Compare(k1, k2: Pointer): Integer; var s1: PString absolute k1; s2: PString.absolute k2; begin if s1< s2 then Compare: = 1 else if s1 = s2 then Compare: = 0 else Compare: = -1 end;
Вместо PStringCollection, Вы сможете вывести на экран список слов, отсортированных в обратном порядке.
