Как удалить элемент из динамического массива в delphi?

Пользователь

от jorge , в категории: Другие , 2 года назад

Как удалить элемент из динамического массива в delphi?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

P

Пользователь

от Programmer , 2 года назад

@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); //уменьшаем длину массива

Пользователь

от mona_terry , год назад

@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.