如何在Delphi中将整数集转换为逗号分隔的字符串


private const
CA_2_4_RECOMMENDED_CHANNELS = [1, 5, 6, 9, 11, 13];

我可以使用";对于";循环,但我如何使用一些泛型来获得逗号分隔的字符串,如"1,5,6,9,11,13"而不使用任何循环?

最简单的方法是使用System.Classes单元中的TStringList类:

const
CA_2_4_RECOMMENDED_CHANNELS = [1, 5, 6, 9, 11, 13];
var
c: integer;
sl: TStringList;
begin
sl := TStringList.Create;
try
for c in CA_2_4_RECOMMENDED_CHANNELS do
sl.Add(c.ToString);
writeln(sl.CommaText);
finally
sl.Free;
end;
end;

但是,即使使用此解决方案,也需要一个For Each循环来填充StringList。在我看来,不存在每个元素都不能被触及的解决方案。

例如,您可以使用RTTI来完成此操作。

program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils, System.Rtti;


type
TMySet=set of byte;
var
m: TMySet;
v: TValue;
begin
try
m := [1, 5, 6, 9, 11, 13];
v := TValue.From<TMySet>(m);
writeln(v.ToString());
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.

最新更新