我有这些代码:
TAPPUGroup = (APP_UG_USERS, APP_UG_SUPER_USERS, APP_UG_ADMINS);
TAPPUGroups = set of TAPPUGroup;
TAppUser = record
UID: integer;
UName: string;
UGroup: TAPPUGROUPS;
end;
...
LoggedUser: TAppUser;
我使用include
将组添加到LoggedUser.UGroup,现在我如何知道TAPPUGroup中特定值的索引,例如,如果在LoggedUser.UGroup中包含APP_UG_SUPER_USERS,我如何在TAPPUGroup中获取它的索引?
示例:如果LoggedUser.UGroup = APP_UG_SUPER_USERS,那么我想返回1,如果LoggedUser.UGroup = APP_UG_ADMINS我想要返回2,依此类推。
答案 0 :(得分:2)
如果你确实想要枚举中给定枚举项的索引,那么你只需要使用Ord()。
换句话说,您可以使用枚举名称,因为它是一个函数:
AGroup := TAPPUGroup(1);
无论如何,Ord()是在连续的枚举声明中找到给定枚举值(如APP_UG_USERS)的索引的方法。要确定特定集合实例是否包含给定的集合元素,请使用"如果xxx在..."构建雷米表演,例如
if APP_UG_USERS in MySet then ...
你也可以这样做
var
AValue : TAPPUGroup;
MySet : TAPPUGroups ;
for AValue:= Low(TAPPUGroup) to High(TAPPUGroup) do
if AValue in MySet then ...
答案 1 :(得分:2)
您不需要索引。要知道Set中是否存在值,请改用in
运算符:
if APP_UG_SUPER_USERS in LoggedUser.UGroup then