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。我无意反驳。。。