集合类型是否适合循环迭代?

Is the set type suitable for an iteration on a loop?

具有以下枚举:

TDays = (tdSunday, tdMonday, tdTuesday, tdWednesday, tdThursday, tdFriday, tdSaturday);

以及该枚举的以下集合:

TChoosenDays = set of TDays;

现在,定义以下数组:

var
  ArrayStringDaysAcronym : array [TDays] of String = ('SD', 'MD', 'TU', 'WE', 'TH', 'FR', 'ST');

假设我有一个变量声明为:

var
  Foo: TChoosenDays;
begin
  Foo:= [tdSunday, tdMonday, tdTuesday];

如何遍历集合中的所有成员?

注意:下面不编译,我知道我可以用数组代替"set of",这是唯一的方法吗?

function ConcatAcronyms: String;
var
  Item: TDays; 
begin
  Result:= '';
  for Item:= Low(Foo) to High(Foo) do
  begin
    Result:= Result + '; '+ ArrayStringDaysAcronym[Item];
  end;
end;     

是的。由于您使用的是 D6,因此您可以这样做:

function ConcatAcronyms: String;
var
  Item: TDays;
begin
  Result:= '';
  for Item:= Low(TDays) to High(TDays) do
  begin
    if Item in Foo then begin
      if Result <> '' then
        Result := Result + ';'  // assuming you don't want Result to start with  a ';'
      Result:= Result + ArrayStringDaysAcronym[Item];
    end;
  end;
end;