forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Delphi (http://forum.boolean.name/forumdisplay.php?f=66)
-   -   удалить ячейку в массиве (http://forum.boolean.name/showthread.php?t=13235)

WhiteBlack 27.08.2010 20:04

удалить ячейку в массиве
 
допустим, есть одномерный массив (mas: array [0..9] of ...)
есть ли какая-нибудь функция для удаления одного элемента массива, чтобы все элементы, находящиеся "выше" удаленного, как бы опустились на единичку, ну вобщем заполнили пустое место
я знаю что можно циклом, но по-моему где давно что-то подобное находил, может кто тоже видел????

Dream 27.08.2010 22:50

Ответ: удалить ячейку в массиве
 
проде как нельзя изменять размер масива. используй листы и иже с ними, где можно удалять по одному элементу

Reks888 28.08.2010 01:43

Ответ: удалить ячейку в массиве
 
смешаешь, удаляешь
Код:

/где-то в начале кода...
type arr:array of int;
var mas:arr;
...
begin
mas.SetLength(9)
...
/А тут очищаем
Procedure RemoveElement(dim:arr, pos:int)
var i:byte;
For i:=pos to dim.Length()-1/Точно не помню как получить последний
  dim[pos]=dim[pos+1]
Next/Лол, я забыл как закрывать в паскале цикл For
dim.SetLength(dim.Length()-1)
End Procedure/фак, надо повторить язык

Возможно что работать не будет, не исключен вариант что при SetLength массив очищается, но это не проблема. На время SetLength можно перенести данные в другой массив.
Ты кодер - ты и мучайся)

HolyDel 28.08.2010 11:51

Ответ: удалить ячейку в массиве
 
Den, да пздц.
тогда лучше уж std::list.

а вообще я бы советовал (если место критично к скорости выполнения) если известен максимальный размер массива, элементы редко вставляются или удаляются, но часто используются. Например это юниты в стратегии - то выделять сразу массив максимального размера, а потом делать как Рекс сказал, но безо всяких этих манипуляций с сетленгхт.

<-TzX-> 30.08.2010 18:21

Ответ: удалить ячейку в массиве
 
Цитата:

Сообщение от WhiteBlack (Сообщение 160061)
допустим, есть одномерный массив (mas: array [0..9] of ...)
есть ли какая-нибудь функция для удаления одного элемента массива, чтобы все элементы, находящиеся "выше" удаленного, как бы опустились на единичку, ну вобщем заполнили пустое место
я знаю что можно циклом, но по-моему где давно что-то подобное находил, может кто тоже видел????

А чем вас цикл не устраивает, организовывал именно таким образом. И все прекрасно работало.


Часовой пояс GMT +4, время: 19:06.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot