【问题标题】:Single storage value that can be interpreted to mean different things可以解释为不同事物的单个存储值
【发布时间】:2017-12-21 15:49:45
【问题描述】:

我想看看是否有一种方法可以将单个值存储在数据库的一列中,但是在读取时,它可能会被解释为数据库中的四列。

我有正方形,它有四个边。我想存储一个值,告诉我哪些边应该有虚线。当读取这个值时,我可以很容易地破译左右两边应该是虚线,或者只是顶部,或者所有边,或者没有。

我知道我可以存储 17 个选项,但有没有更简单的方法?我将在界面中有四个按钮,显示他们想要点缀的边,并以这种方式存储一个值。

有没有办法在存储和重新解释部分的一些伪代码中向我展示这一点?

【问题讨论】:

    标签: database algorithm math computation-theory


    【解决方案1】:

    双方有 16 种可能性——每一方都有两种可能性,每个决定都独立于其他,所以你将这些数字相乘,得到2*2*2*2=16

    您可以只存储015 之间的整数。要获得左侧的选择,请计算n & 1,其中n 是存储的数字。 (“&”符号在许多计算机语言中表示“按位与”。)结果1 表示虚线,而0 表示实线。要得到右边,计算n & 2,顶部是n & 4,底部是n & 8。请注意,这些公式中的“幻数”是 2**02**12**22**3

    您可以轻松地走另一条路。如果您以01 表示的选择是a,b,c,d,那么n = 1*a + 2*b + 4*c + 8*d。请注意与上一段中相同的幻数。

    如果您知道二进制数系统,那么这些公式是显而易见的。如果您想了解更多信息,请在“二进制数”上进行网络搜索。


    当然,解决问题的另一种方法是存储 string 值而不是整数。例如,您可以存储

    "left=dashed, right=solid, top=solid, bottom=dashed"
    

    并使用您的语言的字符串处理工具来解析字符串。这个过程比我的第一个方法更长,并且使用更多的内存来存储,但它的优点是对任何检查数据的人来说更加透明和易于理解。


    您在评论中使用像"1101" 这样的短字符串的想法是一个很好的想法,并且根据实现,它甚至可能比我的第一个解决方案使用更少的内存。它显示的信息量与我的第一个解决方案相同,但少于我的第二个解决方案。您的想法和其他想法的实现取决于语言以及如何将每一方的决定存储在变量中。在 Python 中,如果 n 是存储的(字符串)值,并且每一边的决策都是布尔变量 a,b,c,dTrue 表示虚线,False 表示实线),那么您的代码可能是

    a = (n[0] == '1')
    b = (n[1] == '1')
    c = (n[2] == '1')
    d = (n[3] == '1')
    

    在 Python 中有一些更短的方法可以做到这一点,但它们对于非 Python 程序员来说不太容易理解。

    【讨论】:

    • 有没有办法在存储和重新解释的一些伪代码中向我展示这一点。很难跟上。
    • 我认为最简单的选择可能是存储为字符串,然后从那里读取。就像“1101”意味着顶部、右侧和左侧。有没有办法在读取它并确定顶部是否从该字符串中的第一个“1”中划线时划分它?自从我做了二进制以来,这是一种方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-07
    相关资源
    最近更新 更多