0

我有一个枚举类型,例如

type
  TMyEnum = (meOne, meTwo, meThree);

现在我需要创建一个函数来确定哪个枚举落在更大的范围内,假设枚举值无限重复......

function EnumOf(const Value: Integer): TMyEnum;
begin

end;

可以将其想象为枚举集不断重复的工作日。如果我传入数字5(例如天数)它应该返回meTwo,因为......

1) meOne
2) meTwo
3) meThree
4) meOne
5) meTwo <--
6) meThree

并且数字7会返回meOne,依此类推。

我应该如何编写这个函数?

4

2 回答 2

7

使用 mod 运算符:

function EnumOf(const Value: Integer): TMyEnum; 
begin
  Assert(Value>0);
  Result := TMyEnum((Value-1) mod (1+ord(high(Result))));
end;

Value-1 将 Value 的基于 1 的索引调整为枚举类型的基于 0 的索引。

于 2013-04-07T16:44:02.907 回答
0

使用mod运算符:

132 mod 5 = 2

因为

132 = 26*5 + 2
于 2013-04-07T16:43:56.433 回答