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

标签 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');

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

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;

关于delphi - 集合类型是否适合循环迭代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33022385/

相关文章:

sql-server - TFDQuery.Prepare 无法确定 MS SQL SERVER 上 INSERT 查询的参数类型

delphi - 使用 Rad Studio 2007 读取 vcl.net 应用程序中的代理详细信息

java - neo4j 动态关系类型,不使用枚举

java - Java 1.6 中的枚举类主体特性

objective-c - 带有 NSnumber 的枚举

java - 如何减少代码中List的使用?

sorting - Delphi XE2 按文件名对 Tstringlist 进行排序

c++ - std::set 不同的比较器用于插入和排序

c++ - 将 std::set 分配给 2D std::vector of ints

Delphi winsock为什么在分配InAddr.S_addr时sockaddr_in值得到 "garbled"