2014-09-05 20 views
0

我不知道這樣做的正確方法。但這是我想要的。 我有一個枚舉如何使用enum t獲取多個值?

安勤{A = 1,B = 2,C = 4,d = 8,E = 16,}

我需要說在數據庫中作爲數int值,

說如果選擇A,c,E

需要在數據庫中說1 = 4 = 16 = 21。

這是確定但從21怎麼我檢索A,C 然後,E提前

感謝您的幫助

+0

你有一個應用程序坐在這個數據庫的頂部嗎?哪種語言?你正在描述一個「flags」枚舉,大多數語言都有簡單的方法來完成你所要求的。 – 2014-09-05 11:54:25

回答

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; 
} 
0

看起來你的枚舉值可以通過2

如權力代表2^0 = 1, 2^1 = 2 ..等

所以你的問題歸結爲:轉換十進制到bianry。

如果你圍繞這個簡單的邏輯,你可以得到各自的枚舉。

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

現在您可以將它們映射到ENUM。