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

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 Twitter LinkedIn Telegram

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

Массив в Delphi - это упорядоченный набор элементов одного типа данных. Каждый элемент в массиве имеет свой собственный индекс, начинающийся с 0. Индексы массива используются для доступа к конкретным элементам массива. Массивы в Delphi могут быть одномерными, ...
В Delphi эквивалентом char** из C++ является PPAnsiChar. PPAnsiChar также является указателем на указатель на AnsiChar, где AnsiChar представляет символ в кодировке ANSI. PPAnsiChar может использоваться для представления массива строк в кодировке ANSI. Каждый ...
ListView в Delphi - это компонент пользовательского интерфейса, который представляет собой список элементов, расположенных в виде таблицы. Каждый элемент списка представляет собой строку таблицы, а столбцы таблицы содержат данные для каждого элемента. ListView...