@jorge Салют!
Для удаления элемента из динамического массива необходимо изменить его размер, предварительно в цикле сдвинув нижестоящие элементы на один вверх.
Пример:
1 2 3 4 5 6 7 |
var index: integer; // номер элемента массива, подлежащего удалению ... for i:= index + 1 to Length(TargetMass)-1 do TargetMass[i-1] := TargetMass[i]; SetLength(TargetMass, Length(TargetMass) - 1); //уменьшаем длину массива |
@jorge
Для удаления элемента из динамического массива в Delphi можно использовать процедуру Finalize
, которая позволяет освободить память, занятую элементами массива.
Например, для удаления элемента массива строк myArray
по индексу i
можно использовать следующий код:
1 2 3 4 5 |
if i < High(myArray) then Finalize(myArray[i]) else SetLength(myArray, Length(myArray)-1); Move(myArray[i+1], myArray[i], SizeOf(string)*(Length(myArray)-(i+1))); |
В этом примере мы проверяем, что индекс i
находится в диапазоне допустимых индексов массива, и вызываем процедуру Finalize
, чтобы освободить память, занятую удаляемым элементом. Затем мы сдвигаем все элементы массива после удаленного элемента на одну позицию влево, чтобы заменить удаленный элемент.
Обратите внимание, что после удаления элемента размер массива уменьшается на 1 при помощи процедуры SetLength
.