Предлагаемый вспомогательный класс (от Gamecat) приведет к тому же поиску, от которого Томас хотел бы избавиться.
Если вы посмотрите на источник, вы сможете увидеть, что на самом деле делает Extract (), и затем использовать тот же подход.
Я предложу что-то вроде этого:
obj := list[idx];
list.list^[idx] := nil; //<- changed from list[idx] := nil;
list.delete(idx);
Это даст вам объект, как это делает Extract (), а затем удалит его из списка без поиска. Теперь вы можете поместить это в метод some, вспомогательный класс или подкласс, или когда захотите.