0

我不知道这样做的正确方法是什么。但这就是我想要的。我有一个枚举

EValue{A=1,B=2,C=4,D=8,E=16,}

我需要将数据库中的 int 值表示为 number ,

说如果选择 A,c,E

需要在数据库中说1 = 4 = 16 = 21。

没关系,但是从 21 开始我如何检索 a、c、e

提前感谢您的帮助

4

2 回答 2

0

看起来您的枚举值可以用 2 的幂表示。

例如2^0 = 1, 2^1 = 2..等。

所以你的问题归结为:将十进制转换为二进制。

如果你把这个简单的逻辑放在一起,你可以得到各自的枚举。

e.g. For input 21, you could get 1, 4, 16 ( = 2 power 0, 2, 4) 

现在您可以将它们映射到 ENUM。

于 2014-09-05T11:59:45.437 回答
0

你可以做这样的事情(伪代码,因为你没有说你使用的是什么语言):

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;
}
于 2014-09-05T11:54:21.847 回答