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..など

したがって、問題は次のようになります。10進数を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 に答える