Отсортированные коллекции
Часто бывает необходимо каким-либо образом упорядочить коллекцию, т.е. расставить ее элементы в определенном порядке. Для этих целей в Turbo Vision предусмотрен специальный объект TSortedCollection. Этот объект порожден от TCollection и, следовательно, уже умеет создавать коллекцию, вставлять в нее элементы и удалять их. Единственное, чего он не умеет - это сортировать коллекцию. В TSortedCollection есть абстрактный метод Compare, который используется для упорядочения элементов и который Вы должны перекрыть, чтобы обеспечить нужную Вам сортировку. Таким образом, чтобы создать отсортированную коллекцию, Вы должны создать объект-потомок от TSortedCollection и перекрыть его метод Compare.
По умолчанию этот метод получает в качестве параметров указатели на два элемента коллекции и должен вернуть 1, 0 или -1 в зависимости от того, больше, равно или меньше какое-то поле первого элемента по сравнению с этим же полем второго элемента. Поле, по которому сравниваются элементы, называется ключевым.
Например, нам требуется создать отсортированную коллекцию, содержащую каталог библиотеки (см. пример п. 19.3), причем в качестве ключевого используется поле Autor^. Тогда создадим новый объект
type
PSort = Tsort;
TSort = object (TSortedCollection)
Function Compare(Key1, Key2: Pointer): Integer; Virtual;
end;
чтобы перекрыть метод Compare. Если теперь объявить новый метод TSort.Compare следующим образом:
Function TSort.Compare(Key1, Key2: Pointer): Integer;
var
A: PSort absolute Key1;
B: PSort absolute Key2;
begin
if A.Autor < BA.Autor then
Compare := -1 else if A.Autor = B.Autor then
Compare := 0
else
Compare := 1
end; {TSort.Compare}
то после объявления
var
BookList: PSort;
вместо
var
BookList: PCollection;
программа выведет каталог, отсортированный по фамилиям авторов:
Джордейн Р.
Справочник программиста персональных компьютеров типа IBM PC, XT и AT
Финансы и статистика, 1991, 544 Йенсен К., Вирт Н.
Паскаль. Руководство для пользователя и описание языка финансы и статистика, 1982, 151 Скэнлон Л.
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий