gpt4 book ai didi

delphi - Delphi中枚举可能的设定值

转载 作者:行者123 更新时间:2023-12-03 14:57:43 25 4
gpt4 key购买 nike

我在 Delphi 中有一个计算算法,有许多不同的选项,我需要尝试每种选项的组合来找到最佳解决方案。

TMyOption = (option1, option2, option3, option4);
TMyOptions = set of TMyOption;

我想知道如何使用整数循环来枚举它们:

for EnumerationInteger := 0 to 15 do begin
Options := TMyOptions(EnumerationInteger);
end;

这不能编译。我想知道是否有任何相当简单的方法可以从 Integer 转换为 Set(网上的大多数问题都尝试采用其他方法,从 Set 转换为 Integer),如果有的话,它是什么?

另一种可能性是仅使用整数作为位字段:

C_Option1 = 1;
C_Option2 = 2;
C_Option3 = 4;
C_Option4 = 8;

然后使用按位与测试成员资格:

if (Options and C_Option2) > 0 then begin
...
end;

我已经尝试过这个,并且它有效,但感觉使用集合会更自然并且更好地使用类型系统(即使我要超出所述类型系统来枚举集合)。

是否有比枚举底层整数表示更好/更安全的方法来枚举所有可能的集合组合?

注释:

  1. 我知道理论上不能保证集合的整数值(尽管如果您不使用枚举编号,我怀疑它们在实践中是存在的)。
  2. 可能有四个以上的选项(是的,我知道它会呈指数级增长,如果选项太多,算法可能会永远持续下去)。

最佳答案

我知道这个问题很老了,但这是我的偏好,因为它对我来说简单而自然:

function NumericToMyOptions(n: integer): TMyOptions;
var
Op: TMyOption;
begin
Result:= [];
for Op:= Low(TMyOption) to High(TMyOption) do
if n and (1 shl ord(Op)) > 0 then Include(Result, Op);
end;

关于delphi - Delphi中枚举可能的设定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4092796/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com