Форум: "Начинающим";
Текущий архив: 2006.07.30;
Скачать: [xml.tar.bz2];
ВнизУдаление записи из массива Найти похожие ветки
← →
XeON © (2006-07-12 00:37) [0]Все здравствуйте. Хотелось бы узнать, как удалить элемент не нужный из динамческого массива? Но не обнулить, а именно удалить! Так, что бы все остальные элементы сдвинулись вверх на 1. Если это имеет какое-то отношение к делу, то это массив записей. Т.е. массив типа TRecord.
← →
Palladin © (2006-07-12 00:46) [1]
Type
TMyRec=Record
...
End;
Var
a:Array of TMyRec;
...
// удаление элемента с номером n
Move(a[n+1],a[n],(Length(a)-n-1)*SizeOf(TMyRec));
← →
Palladin © (2006-07-12 00:48) [2]и после еще
SetLength(a,High(a));
← →
XeON © (2006-07-12 01:37) [3]Спасибо за помощь, огромное! Данная информация меня просто спасла (от смерти :). Ещё раз спасибо, что откликнулся!
← →
begin...end © (2006-07-12 07:25) [4]В случае, если TRecord содержит поля типов с управляемым временем жизни, [1] не годится. В общем случае наиболее простым решением будет сдвиг не с помощью Move, а путём поэлементного присваивания, с последующим уменьшением длины массива.
← →
han_malign © (2006-07-12 10:43) [5]
> begin...end © (12.07.06 07:25) [4]
> а путём поэлементного присваивания
Finalize(a[n]);
move(...);
FillChar(a[High(a)], sizeof(a[High(a)]));
SetLength(a, High(a));
← →
begin...end © (2006-07-12 11:28) [6]> han_malign © (12.07.06 10:43) [5]
Спасибо, но об этом способе я знаю (если, конечно, в третьей строке имелось в виду заполнение нулями). Однако назвать его наиболее простым я не могу -- обычное поэлементное присваивание гораздо проще. О чём и было сказано в [4].
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.07.30;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.012 c