我想看看是否有一种方法可以在数据库的一列中存储单个值,但是在读取时,它可以被解释为数据库中的四列。
我有正方形,有四面。我想存储一个值,告诉我哪些边应该有一个虚线。当读取该值时,我可以很容易地解密,就像左侧和右侧应该是虚线,或者只是顶侧,或所有侧面,或者没有。
我知道我可以说17种可以存储的选项,但有一个更简单的方法吗?我将在界面中有四个按钮,显示他们想要点缀的边,并以这种方式存储值。
有没有办法在存储和重新解释部分的某些伪代码中向我显示这个?
双方有16种可能性 - 每一方都有两种可能性,每一种决定都与其他决策无关,所以你将这些数字相乘,得到2*2*2*2=16
。
你可以在0
和15
之间存储一个整数。要获得左侧的选择,请计算n & 1
,其中n
是存储的数字。 (“&”符号在许多计算机语言中的意思是“按位和”。)结果1
表示虚线,而0
表示实体。为了得到正确的一面,计算n & 2
,顶部是n & 4
,而底部是n & 8
。请注意,这些公式中的“幻数”是2**0
,2**1
,2**2
和2**3
。
你可以轻松地走另一条路。如果你的选择表达为0
或1
是a,b,c,d
,那么n = 1*a + 2*b + 4*c + 8*d
。请注意与上一段相同的幻数。
如果你知道二进制数系统,那些公式是显而易见的。如果您想了解更多信息,请在“二进制数字”上进行网络搜索。
当然,另一种解决问题的方法是存储字符串值而不是整数。例如,您可以存储
"left=dashed, right=solid, top=solid, bottom=dashed"
并使用您的语言的字符串处理工具来解析字符串。这是一个比我的第一个方法更长的过程,并且使用更多的内存用于存储,但它具有对于检查数据的任何人来说更透明和易于理解的优点。
你在使用像"1101"
这样的短字符串的评论中的想法很好,根据实现,它甚至可能比我的第一个解决方案使用更少的内存。它显示的信息量与我的第一个解决方案相同,而不是第二个。您的想法和其他想法的实施取决于语言以及如何在变量中存储每一方的决策。在Python中,如果n
是存储的(字符串)值,并且每一方的决策都是布尔变量a,b,c,d
(True
表示虚线,False
表示实体),您的代码可能是
a = (n[0] == '1')
b = (n[1] == '1')
c = (n[2] == '1')
d = (n[3] == '1')
在Python中有更短的方法可以做到这一点,但对于非Python程序员来说,它们不太容易理解。