Главная » Delphi » Delphi 2006 – Перебор элементов контейнера

0

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

for элемент in контейнер do тело-цикла;

В качестве элемента должна указываться переменная, тип которой совпадает с типом отдельного элемента контейнера. Значение этой переменной внутри тела цикла модифицироваться не может. Первоначально элемент цикла принимает значение первого элемента контейнера (расположенного по его нижнему индексу), а затем поочередно принимает значения следующих элементов до конца контейнера. Если контейнер — многомерный массив, то в элемент цикла будет записываться массив с числом измерений, на единицу меньшим, нежели исходный.

Если в качестве контейнера выступает строка, то перебор происходит поочередно по символам этой строки от начала до конца.

S := ‘12345’;

Рог с in S do

WriteLn( с ); // поочередно печатаем символы 1, 2, 3, 4, 5

Схожая ситуация и с множеством, а также с классами (и их наследниками), которые могут рассматриваться как последовательные наборы объектов. Для этого они должны быть наследниками стандартных классов TCollection, TStrings, TInterfaceList, TComponent, TMenuItem, TCustomActionList, TFields, TListltems, TTreeNodes или TToolBar. Например, перебор всех элементов стандартного компонента-списка ListBoxl, размещенного на форме, и перенос их в многострочное поле Memol запишется так:

var s: String;

for s in ListBoxl.Items do Memol.Lines.Add(s);

Так как свойство items списка имеет тип TStrings (Набор cfpoK), то переменная s будет последовательно, по мере выполнения цикла, принимать значения из этого списка.

Переменная-счетчик в таких циклах не обязательно должна быть базового типа. Если коллекция хранит записи или объекты, то и счетчик будет описан как запись или класс.

Бобровский С. И. Технологии Delphi 2006. Новые возможности. — СПб.: Питер, 2006. — 288 е.: ил.

По теме:

  • Комментарии