我不知道這樣做的正確方法。但這是我想要的。 我有一個枚舉如何使用enum t獲取多個值?
安勤{A = 1,B = 2,C = 4,d = 8,E = 16,}
我需要說在數據庫中作爲數int值,
說如果選擇A,c,E
需要在數據庫中說1 = 4 = 16 = 21。
這是確定但從21怎麼我檢索A,C 然後,E提前
感謝您的幫助
我不知道這樣做的正確方法。但這是我想要的。 我有一個枚舉如何使用enum t獲取多個值?
安勤{A = 1,B = 2,C = 4,d = 8,E = 16,}
我需要說在數據庫中作爲數int值,
說如果選擇A,c,E
需要在數據庫中說1 = 4 = 16 = 21。
這是確定但從21怎麼我檢索A,C 然後,E提前
感謝您的幫助
你可以做這樣的事情(僞代碼,因爲你沒有說你使用的是什麼語言):
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;
}
看起來你的枚舉值可以通過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。
你有一個應用程序坐在這個數據庫的頂部嗎?哪種語言?你正在描述一個「flags」枚舉,大多數語言都有簡單的方法來完成你所要求的。 – 2014-09-05 11:54:25