简单的数字模式,将组合存储为唯一总和

Ant*_*ony 2 database math unique combinatorics

这是一个数学问题,但我确信这必须出现在一些编程场景中,至少我希望如此,我想知道是否有这种情况的名称:

假设我有一个系列中的7个项目.为了这个例子,让我们使用一周中的几天.我希望用户提交他们计划在下一周进入的一周中的哪几天.它们带有一系列标准复选框,每周一个.

我想将它们在一个数据库字段中选择的日期存储为单个整数.

显然,我可以为每天分配一个数字,1 - 7(如果用户未选中所有选项,则保留0).但是如果一个用户选择星期一和星期二(1 + 2)而另一个用户选择星期三(3),那么我会遇到问题.

我还可以给一周中的每一天都有一些奇怪的独特之处,这样任何数字组合都不可能与任何其他组合相同.

我的希望是,不是为第二个场景组成这样一个系列,而是已经存在一些数字属性(可能是系列中每个数字的平方等),这些属性已经得到充分利用和尊重.理想情况下,这对编程来说非常熟悉,导出各个数字只需要很少的通用编程语言开销(在我的例子中是PHP).

我只是梦想这个,还是做这样的事情?

Dav*_*d M 6

使用位掩码 - 2的幂.

Monday = 2 ^ 0 = 1
Tuesday = 2 ^ 1 = 2
Run Code Online (Sandbox Code Playgroud)

等等.然后星期一和星期二变成:

Monday | Tuesday = 3 (or 00000011 in binary)
Run Code Online (Sandbox Code Playgroud)


Adr*_*der 5

你可以用

Monday = 1
Tuesday = 2
Wednesday = 4
Thursday = 8
Friday = 16
Saturday = 32
Sunday = 64
Run Code Online (Sandbox Code Playgroud)

这些组合将是独一无二的.

然后周一和周二= 3,周三= 4.

这给出了C#中idee的一个很好的解释

枚举标志属性