我有一个现有的数据库,我的表中有一个字段,其中存储了一个值,所有"值的总和"我的复选框列表。
另一位程序员制作了这种方法,称之为"逻辑和"。我不知道这个方法,但现在我需要知道反向方法,所以我可以通过使用所有值的Sum值来知道选择了哪些复选框。
我真的不知道如何做到这一点......我正在使用C#和asp.net,但所有语言的逻辑都应该相同。
你能帮助我吗?
答案 0 :(得分:4)
通常情况下,这些事情的权力为2 ......第一个复选框的“权重”为1,第二个复选框的“权重”为2,第三个复选框的权重为4,依此类推。
您可以通过执行
检查是否选中了复选框if ((sum & 1) != 0) // first is checked
if ((sum & 2) != 0) // second is checked
if ((sum & 4) != 0) // third is checked
或
bool firstIsChecked = (sum & 1) != 0;
bool secondIsChecked = (sum & 2) != 0;
bool thirdIsChecked = (sum & 4) != 0;
等等。
如果你不喜欢二进制数学,你可以通过enum
来利用Enum.HasFlag
方法:
[Flags]
public enum MyChechboxes
{
FooCheckbox = 1,
BarCheckbox = 2,
BazCheckbox = 4,
}
int sum = 5;
MyChechboxes checkeds = (MyChechboxes)sum;
bool firstIsChecked = checkeds.HasFlag(MyChechboxes.FooCheckbox);
bool secondIsChecked = checkeds.HasFlag(MyChechboxes.BarCheckbox);
bool thirdIsChecked = checkeds.HasFlag(MyChechboxes.BazCheckbox);
答案 1 :(得分:2)
假设您有一家公司有5个功能(A,B,C,D,E)
<强>保存.. 强>
如果(A.isChecked)
features = features | 1;
如果(B.isChecked)
features = features | 2;
如果(C.isChecked)
features = features | 4;
如果(D.isChecked)
features = features | 8;
如果(E.isChecked)
features = features | 16;
在您的数据库中存储功能值。
<强>中.. 强>
从db中获取价值
如果(特征&安培; 1)
A is checked
如果(特征和2)
B is checked
如果(特征和4)
C is checked
如果(特征和8)
D is checked
如果(特征&安培; 16)
E is checked
答案 2 :(得分:0)
您知道如何使用flags吗? 要使这种逻辑和方法可逆,它必须使用与标志枚举相同的原则:每个可能的复选框组合必须产生一个唯一的数字。
我猜测没有那么多复选框,编号如下: 1,2,4,8,16,32 ...等。这样任何组合都会产生一个数字,逻辑和将是可逆的。