Type Door
Field ID%
End Type
Local Door.Door, i%
For i = 1 To 10
Door = New Door
; Функция Handle формирует индексную карту
; записывая туда указатель на объект под его порядковым номером
; возвращает соответственно порядковый номер
Door\ID = Handle(Door)
Next
; Достаем из карты объект по индексу - порядковому номеру (1...N)
Door = Object.Door(3)
; Обязательно проверяем на нуль
; т.к. после удаления обьекта слот карты остается
; и под тем же индексом уже будет нуль
If Door <> Null Then Print(Str(Door\ID)) Else Print("Слот пустой!")
; Ну и еще один трюк, удаление всех объектов встроеным циклом
Delete Each Door
WaitKey()
End
И пример подобной карты на блице

Type Door
; обязательные поля для размещения в индексной карте
Field Link.Door, Index%
; тут какие-то свои поля
End Type
;
; Кол-во слотов в индексной карте
;
Const MapSize% = 1024
;
; Создает дверь с индексом Index и размещает в карте Map
;
Function NewDoor.Door(Map.Door[MapSize], Index%)
Local Door.Door
Door = New Door
Door\Index = Index
Index = Index Mod MapSize
Door\Link = Map[Index]
Map[Index] = Door
Return Door
End Function
;
; Удаляет дверь по индексу Index из карты Map
;
Function DeleteDoor(Map.Door[MapSize], Index%)
Local Temp.Door, Door.Door
Temp = Null
Door = Map[Index Mod MapSize]
While Door <> Null
If Door\Index = Index Then
If Temp <> Null Then
Temp\Link = Door\Link
Else
Map[Index Mod MapSize] = Door\Link
End If
Delete Door
Exit
End If
Temp = Door
Door = Door\Link
Wend
End Function
;
; Возвращает дверь по индексу Index из карты Map
;
Function GetDoor.Door(Map.Door[MapSize], Index%)
Local Door.Door
Door = Map[Index Mod MapSize]
While Door <> Null
If Door\Index = Index Then Return Door
Door = Door\Link
Wend
Return Null
End Function
;
; Пример
;
Local DoorMap.Door[MapSize]
Local Door.Door, i%
For i = 1 To 10
Door = NewDoor(DoorMap, i)
Next
Door = GetDoor(DoorMap, 3)
If Door <> Null Then Print(Str(Door\Index)) Else Print("Слот пустой!")
DeleteDoor(DoorMap, 3)
Door = GetDoor(DoorMap, 3)
If Door <> Null Then Print(Str(Door\Index)) Else Print("Слот пустой!")
WaitKey()
End
Т.е. получается массив однонаправленных списков, список растет в случае добавления обьекта в уже занятый слот, зависит от размера массива и функции распределения указателей (в данном элементарном случае это Mod)