我不知道这样做的正确方法是什么。但这就是我想要的。我有一个枚举
EValue{A=1,B=2,C=4,D=8,E=16,}
我需要将数据库中的 int 值表示为 number ,
说如果选择 A,c,E
需要在数据库中说1 = 4 = 16 = 21。
没关系,但是从 21 开始我如何检索 a、c、e
提前感谢您的帮助
我不知道这样做的正确方法是什么。但这就是我想要的。我有一个枚举
EValue{A=1,B=2,C=4,D=8,E=16,}
我需要将数据库中的 int 值表示为 number ,
说如果选择 A,c,E
需要在数据库中说1 = 4 = 16 = 21。
没关系,但是从 21 开始我如何检索 a、c、e
提前感谢您的帮助
看起来您的枚举值可以用 2 的幂表示。
例如2^0 = 1, 2^1 = 2
..等。
所以你的问题归结为:将十进制转换为二进制。
如果你把这个简单的逻辑放在一起,你可以得到各自的枚举。
e.g. For input 21, you could get 1, 4, 16 ( = 2 power 0, 2, 4)
现在您可以将它们映射到 ENUM。
你可以做这样的事情(伪代码,因为你没有说你使用的是什么语言):
function getEnums(value:string):enum[]
{
var result = new enum[];
foreach (var e in Enum.getValues(enum).orderBy(val.toInt()))
{
if (value == 0)
break;
var eVal = e.toInt();
if (value >= eVal)
{
result.add(e);
value -= eVal;
}
}
return result;
}