Иллюстрированный самоучитель по Tirbo Pascal


Отсортированные коллекции - часть 2


Персональные ЭВМ IBM PC и XT. Программирование на языке ассемблера

Радио и связь, 1991, 336 Шелдон

Язык Си для профессионалов И.В.К.-СОФТ, 1991, 383

Ключевое поле определяется методом TSortedCollection.KeyOf. Этот метод по заданному в качестве параметра обращения указателю на элемент коллекции возвращает указатель на ключевое поле. По умолчанию метод KeyOf возвращает указатель на весь элемент, однако Вы можете перекрыть его новым методом, возвращающим указатель на нужное ключевое поле. Пусть, например, нам требуется отсортировать каталог по году издания книг (поле Year). Добавим в описание объекта TSort перекрытие метода KeyOf:

type

TSort = object (TSortedCollection)

.....

Function KeyOf(Item: Pointer): Pointer; Virtual; 

end ;

Опишем новый метод следующим образом:

Functon TSort.KeyOf(Item: Pointer): Pointer; 

begin

KeyOf := PBook(Item).Yеаr 

end;

и изменим описание метода Compare:

Function TSort.Compare(Key1, Key2: Pointer): Integer; 

var

A: Integer absolute Key1; 

B: Integer absolute Key2; 

begin

if А < B then

Compare := -1

else if А = B then

Compare := 0 

else

Compare := 1

end; {TSort.Compare}

Теперь после запуска программы на экран будет выведено:

Йенсен К., Вирт Н.

Паскаль. Руководство для пользователя и описание языка

Финансы и статистика, 1982, 151

Джордейн Р.

Справочник программиста персональных компьютеров типа IBM PC,

XT и AT

Финансы и статистика, 1991, 544

Обратите внимание: в отсортированной коллекции теперь хранятся только 2 элемента! Произошло это потому, что по умолчанию TSortedCollection игнорирует новую запись, если в коллекции уже существует элемент, ключевое поле которого имеет такое же значение. Таким образом, обычно в отсортированной коллекции содержатся записи с уникальными ключевыми полями.

Можно ли поместить в коллекцию два или больше элементов с одинаковыми полями? Turbo Vision позволяет сделать это: поле TSortedCollection.Duplicates по умолчанию содержит FALSE, что указывает на уникальность ключевого поля; если перед наполнением коллекции Вы поместите в это поле значение TRUE, коллекция не будет контролировать уникальность ключевых полей.




- Начало -  - Назад -  - Вперед -



Книжный магазин