从字符串数组中逐位选择

时间:2016-03-12 03:36:52

标签: arrays vbscript

我有一个字符串值数组("A","B","C","D"),其中一个单独的整数值表示数组的按位映射。字符串值被映射为(8,4,2,1),使得结果值10表示("A","C")或逐位外推。我试图围绕这个构建一个函数,所以我可以传入整数并返回一个字符串值数组或连接(分隔)字符串结果。

如果已经完成,请指点我?我一直在寻找,但我怀疑我的搜索条件是错误的,让我无法找到解决方案。

3 个答案:

答案 0 :(得分:2)

您使用整数值作为位掩码,因此您需要使用逻辑And操作来检查给定值是否设置了特定位:

10 And 23 ⇔ 10 And 8 ⇒ 8
10 And 22 ⇔ 10 And 4 ⇒ 0
10 And 21 ⇔ 10 And 2 ⇒ 2
10 And 20 ⇔ 10 And 1 ⇒ 0

如果操作返回非零结果,则设置一个位。

但是,您的映射是数组中实际索引顺序的反转:

Array value:   A  B  C  D
Array index:   0  1  2  3
Numeric value: 1  2  4  8  (20 21 22 23)
Your mapping:  8  4  2  1

因此,您需要将值计算为2max_index - index,例如23-2 = 21表示数组元素C

答案 1 :(得分:0)

使用字典。字典有一个键和一个值。两者都可以是任何东西(并且不需要使用值)。

Set Dict = CreateObject("Scripting.Dictionary")
    Dict.Add "A", "1"
            For Each thing in Dict.Keys()
                msgbox thing
            Next
            'or
            msgbox Dict.Item("A")

答案 2 :(得分:0)

解决方案(谢谢你Ansgar Wiechers!)......

function Get_BitValues (intVal)
    Dim x, y, i, n, result : result = ""
    y = Array( 1, 2, 4, 8, 16, 32, 64 )
    x = Array( "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" )
    for i = 0 to UBound(x)
        n = 2^i
        if intVal and n Then
            if result <> "" then
                result = result & "," & x(i)
            else
                result = x(i)
            end if
        end if
    next
    Get_BitValues = result
end function

wscript.echo Get_BitValues(80)
wscript.echo Get_BitValues(127)
wscript.echo Get_BitValues(42)