我有一个字符串值数组("A","B","C","D"
),其中一个单独的整数值表示数组的按位映射。字符串值被映射为(8,4,2,1
),使得结果值10表示("A","C"
)或逐位外推。我试图围绕这个构建一个函数,所以我可以传入整数并返回一个字符串值数组或连接(分隔)字符串结果。
如果已经完成,请指点我?我一直在寻找,但我怀疑我的搜索条件是错误的,让我无法找到解决方案。
答案 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)