确定重复的枚举在更大范围内的位置

Jer*_*dge 0 delphi math enums

例如,我有一个枚举类型

type
  TMyEnum = (meOne, meTwo, meThree);
Run Code Online (Sandbox Code Playgroud)

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

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

end;
Run Code Online (Sandbox Code Playgroud)

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

1) meOne
2) meTwo
3) meThree
4) meOne
5) meTwo <--
6) meThree
Run Code Online (Sandbox Code Playgroud)

数字7会返回meOne,依此类推.

我应该怎么写这个函数?

Dav*_*nan 7

使用mod运算符:

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

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