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

Delphi 集合类型是否适合循环上的迭代?,delphi,enums,set,delphi-6,Delphi,Enums,Set,Delphi 6,具有以下枚举: 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');

具有以下枚举:

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;
函数ConcatAcronyms:String;
变量
项目:TDays;
开始
结果:='';
对于项目:=低(TDays)到高(TDays)do
开始
如果项目在Foo中,则开始
如果结果为“”,则
结果:=结果+';'//假设您不希望结果以“;”开头
结果:=结果+ArrayStringDaysAcronym[项目];
结束;
结束;
结束;

不错,但实际上我希望以“;”开头。我也是,虽然我不太明白其中的关联性!!;-)我认为在这里违反规定是错误的。我还认为,在我的编辑中,当我们交叉时被飞溅的变体实际上比你们两个都干净。我不确定Delphi 6,但在现代版本中,循环是这样可能的:
vard:TDay;在Foo do begin SmFnc(D)中为D开始。。。结束;结束@asd tm谢谢,但我被这个旧版本卡住了yet@asd-tm:“if Element in[]”构造自Pascal首次定义iirc以来就一直存在。因为它是什么。@MartynA我不是说MySet then中的
if元素。我在MySet do中为元素编写了一个循环
@asd tm:Sure。我无意反驳。。。