如何在不使用列表然后解析的情况下将多个值放入一个变量或字段?

时间:2013-03-05 20:43:03

标签: enumerable multivalue

有时需要在一个变量或数据库字段中包含多个值,即使这违反了关系规范化原则。在python和支持列表的其他语言中,这很容易。在其他情况下,它不是。见insert multiple values in single attribute

一种常见的技术是将值连接成逗号分隔的字符串:“1,2,3”或“英语,法语,西班牙语”,然后通过解析提取值。

当有效值来自枚举列表时,是否有另一种不需要解析的方法?

2 个答案:

答案 0 :(得分:1)

是。使用素数,将它们相乘,然后将它们分解出来。

  1. 要使用的字段类型是整数或大整数

  2. 使用作为素数的代码值
    • 3 ==英语
    • 5 ==法语
    • 7 ==西班牙文
    • 11 ==意大利语

  3. 将所有适用的产品存储到现场。
    • 21 ==英语和西班牙语
    • 385 ==法语,西班牙语和意大利语

  4. 使用模数函数确定字段中的值

    if ( field % 3 == 0 ) {  english() ;}
    if ! (field % 5) { french() ;}
    =IF(NOT(MOD(A203,5)),"French","")
    


  5. 相同的值可以多次出现
    • 9 ==英语,英语
  6. 我首先使用这种技术来存储尺寸。

    • 3 ==时间
    • 5 == length
    • 7 ==质量
    • 11 ==充电
    • 13 ==温度
    • 17 == moles

    例如,“第一时刻”杠杆臂的尺寸值为35 ==质量*长度。 为了将小数维度存储在一个整数中,我将小数维度乘以所有小数的乘积并在处理中处理它。

    • 255255 == 3 * 5 * 7 * 11 * 13 * 17
    • force == mass * length /(second ^ 2)
    • force ==(7 * 5 /(3 * 3))* 255255 * 255255
    • force == 253381002875

    我使用整数的原因是为了避免由于舍入错误而处理无效的相等比较。

    请不要让代码提取分数维。所有这些都是40年前的APL / 360。

答案 1 :(得分:0)

如果您不需要允许相同值的倍数,那么您可以使用位图。根据是否有最多8,16,32,64或128个允许值,它们可以适合1,2,4,8或16字节整数。