Удаление элементов массива путем смещения

2 минуты на чтение

В этой статье я хотел бы поговорить о том, как можно удалить элементы массива путем смещения. Многие применяют технологию удаления — путем замены, удаляемых элементов например нулями или еще чем-то, а при выводе элементов массива их просто не выводят. Многие просто записывают в другой массив нужные элементы и потом выводят его, это не есть правильно, то есть фактически у нас же есть массив, значит мы в нем должны удалить элементы, а не переместить в другой, а если эти элементы не выводить, то они же фактически остаются там, и занимают место в памяти, что не есть хорошо. Алгоритм путем смещения очень простой, просто с элементы, которого надо удалить, например все «нули» начинается смещение элементов до конца массива, потом цикл начинается заново и до тех пор, пока не будет элементов в массиве, которые необходимо удалить. На форме у меня следующие компоненты, мы будет все это делать не в консольном режиме, в а графическом

  • TStringGrid
  • TButton

В TStringGrid свойстве Options-goEditing установить в True, в FixedCols, FixedRows установите в 0, в свойстве RowCount установите 1 (так как мы будем работать с одномерным массивом).

Далее на событие OnClick Button я написал следующий код

procedure TForm1.BitBtn1Click(Sender: TObject);
var
 i,j:integer;
begin
   try
    j:=0;
    i:=0;
    while (i<=StringGrid1.ColCount-1) do
     begin
      if StringGrid1.Cells[i,0]='0' then
       begin
        for j:=i to StringGrid1.ColCount-1 do
         begin
          StringGrid1.Cells[j,0]:=StringGrid1.Cells[j+1,0];
         end;
        i:=i-1;
        StringGrid1.ColCount:=StringGrid1.ColCount-1;
       end;
      inc(i);
     end;
   except
    on e:Exception do
   end;
end;

Все, что говорил выше, все так  реализовано здесь. Только забыл сказать, что мы еще уменьшаем размерность массива, в нашем случае количество столбцов, ну раз мы удалили элемент, то и размер его поменяется ведь так? В следующий статьях про массивы мы рассмотрим — сортировки массива методом пузырька, методом минимального элемента, ну и другие разные задачки с массивами.

Facebook Vk Ok LinkedIn Telegram

Похожие записи:

Ну вот не долго думая, подошла вторая часть по работе с ADO в DELPHI на примере БД — MS Excel. В данной статье мы рассмотрим добавление и редактирование данных, так как с удалением тут возникли проблемы, в связи с тем, что данный драйвер не поддерживает удален...
Здравствуйте, вот решил наконец-то вернуться к написанию статей о проекте VK в Delphi. Давненько я не писал, но вот решил закончить серию статье по работе со стеной пользователя. На этот раз мы рассмотрим как можно удалять сообщения со стены пользователя. По у...
Здравствуйте, в этой статье я хотел бы поговорить как можно удалить сообщения, которые Вы хотите, будем так говорить. Для того, чтобы их удалить нам необходимо знать их идентификатор, то есть просто так по названию, по заголовку, по отправителю мы не сможем ег...