TSortedCollection (модуль Objects)


TObject
 
Init
Done
Free
TCollection
Count Items
Delta Limit
Init ForEach
Load Free
Done FreeAll
At FreeItem
AtDelete GetItem
AtFree IndexOf
AtInsert Insert
AtPut LastThat
Delete Pack
DeleteAll PutItem
Error SetLimit
FirstThat Store
TSortedCollection
Duplicates
Load
Compare
IndexOf
KeyOf
Search
Store

    TSortedCollection - это специализированный производный от TCollection тип, реализующий наборы, отсортированные по ключу. Сортировка реализуется виртуальным методом Compare, который вы переопределяете для определения собственного порядка сортировки элементов. При добавлении новых элементов они автоматически включаются в порядке, заданном методом Compare. Элементы можно находить с помощью метода двоичного поиска Search. Если Compare требуется дополнительная информация, виртуальный метод KeyOf, возвращающий указатель на Compare, также можно переопределить.

    TSortedCollection реализует отсортированные наборы с дублируемыми ключами и без них. Поле Duplicates управляет разрешением дублирования. По умолчанию оно равно False. Это указывает, что дублирующиеся ключи не разрешаются, но после создания отсортированного набора вы можете установить Duplicates в True, что позволит использовать в наборе элементы с дублирующимися ключами.

Поля


Duplicates (только чтение)

     Duplicates: Boolean;

    Определяет, будет ли набор воспринимать элементы с дублируемыми ключами. По умолчанию Duplicates имеет значение False, и вызов метода Insert для элемента, уже содержащегося в наборе, не приводит к включению нового элемента. В наборе будет содержаться только первый элемент с данными ключом.

    Если вы установите Duplicates в True, дублирующие элементы вставляются в набор непосредственно перед первым элементом с этим ключом.

Методы


    Ниже описываются методы, определенные в данном объекте.

Load


     constructor Load(var S: Stream);

    Строит и загружает отсортированный набор из потока S, вызывая сначала метод TCollection.Load, а затем считывая поле Duplicates TSortedCollection.

    См. также: TCollection.Load.

Compare (всегда переопределяется)


     function Compare(Key1, Key2: Pointer): Integer; virtual;

    Compare - это абстрактный метод, который должен переопределяться в наследующих типах. В Compare должны сравниваться два значения ключей и возвращаться следующий результат: -1, если Key1 < Key2; 0 если Key1 = Key2 и 1, если Key1 > Key2.

    Key1 и Key2 - это значения указателей, выделенные из соответствующих элементов наборов методом TSortedCollection.KeyOf. Метод TSortedCollection.Search реализует двоичный поиск по элементам набора, используя для сравнения элементов метода Compare.

    См. также: TSortedCollection.KeyOf, TSortedCollection.Compare.

IndexOf (никогда не переопределяется)


     function IndexOf(Item: Pointer): Integer; virtual;

    Использует TSortedCollection.Search для определения индекса данного элемента. Если элемента в наборе нет, то IndexOf возвращает -1. Фактической реализацией TSortedCollection.IndexOf является:

     if Search(KeyOf(Item), I) then IndexOf := I
             else IndexOf := -1;

    См. также: TSortedCollection.Search.

Insert (никогда не переопределяется)


     procedure Insert(Item: Pointer); virtual;

    Если целевой элемент в отсортированном наборе не найден, то он включается в текущей позиции индекса. Для определения наличия или отсутствия элемента вызывает TSortedCollection.Search. Если элемент отсутствует, то включает его. Фактической реализацией TSortedCollection.Insert является:

     if not Search(KeyOf(Item), I) or Duplicates then
             AtInsert(I, Item);

    См. также: TSortedCollection.Search.

KeyOf (иногда переопределяется)


     function KeyOf(Item: Pointer): Pointer: virtual;

    По заданному элементу набора Item функция KeyOf должна возвращать соответствующий ключ элемента. По умолчанию TSortedCollection.KeyOf просто возвращает Item. KeyOf переопределяется в тех случаях, когда ключ не является самим элементом.

    См. также: TSortedCollection.IndexOf.

Search (переопределяется редко)


     function Search(Key: Pointer; var Index: Integer): Boolean;
                     virtual;

    Возвращает True, если идентифицируемый ключом Key элемент найден в отсортированном наборе. Если элемент найден, Index возвращает индекс этого элемента. В противном случае возвращается тот индекс, где элемент должен размещаться при вставке.

    См. также: TSortedCollaction.Compare, TSortedCollection.Insert.

Store


     procedure Store(var S: Stream);

    Записывает отсортированный набор и его элементы в потоке S, вызывая для записи набора TCollection.Store, а затем записывая в поток поле Duplicates.

    См. также: TSortedCollection.Store.