2009-12-15 20 views
1

這是一個數學問題,但我敢肯定,這必須拿出一些編程場景,至少我希望如此,我想知道是否有一個名字爲這個類型的情況:以組合存儲爲一個獨特的和簡單的數字模式

假設我有一個系列中的7個項目。爲了這個例子,我們使用一週中的幾天。我希望用戶提交他們計劃在接下來的一週內每週的哪幾天。他們會看到一系列標準複選框,每週有一個複選框。

我想它們存儲在一個數據庫字段選擇作爲一個整數天。

很顯然,我可以分配每天的數字,1 - 7(0留出的情況下在用戶離開所有選項選中)。但是如果一個用戶選擇星期一和星期二(1 + 2),另一用戶選擇星期三(3),那麼我會遇到問題。

我也可以給一週的每一天一些奇怪的獨特,使得它是不可能的數字任意組合是相同的任何其他組合。

我希望,而不是做出這樣一個系列的第二個場景中,一些數值屬性已經存在(也許是系列中的每個號碼等的平方),它已經充分使用和推崇。理想情況下,這對編程非常熟悉,因此獲取單個數字將花費很少的通用編程語言(在我的情況下是PHP)的開銷。

難道我只是想這個,或者做這樣的事情嗎?

回答

6

使用位掩碼一個很好的解釋 - 2.

權力
Monday = 2^0 = 1 
Tuesday = 2^1 = 2 

等等。然後,週一和週二變爲:

Monday | Tuesday = 3 (or 00000011 in binary) 
+0

哦,我明白了!這不僅避免了重疊(這對於旁觀者的答案是有意義的),而是用二進制表示整數實際上給出了一週中每天的開/關可能。哇,也許我應該上課或者其他什麼。謝謝! – Anthony

5

你可以使用

Monday = 1 
Tuesday = 2 
Wednesday = 4 
Thursday = 8 
Friday = 16 
Saturday = 32 
Sunday = 64 

的組合將是唯一的。

然後星期一和星期二= 3,週三= 4

這使愛迪在C#

Enum Flags Attribute

0

早在當記憶是珍貴的,程序員經常去了很多麻煩來編碼設置,參數,遊戲界面等爲位集。有些語言甚至內置了位集。

我記得曾經閱讀過有關使用它們來存儲電路板佈局以解決Eight Queens問題的位集教程。

大多數C程序員不得不位操作的宏自己的小圖書館只是這類問題。例如,請參閱Bit Sets。它們在代碼中仍然用得很多,這些代碼直接控制硬件 - 例如,在數字I/O中打開和關閉位。

相關問題