VBSCRIPT数组键

4

我对vbscript还比较陌生,因为我更熟悉Javascript,所以有些困难。请问有人可以帮我吗?

vbscript是否允许使用像下面示例中的命名数组键?

例如,我有:

Dim result(3)
result(age)       = 60
result(firstname) = "Tony"
result(height)    = 187
result(weight)    = 76

msgbox("Age: "    & result(age)       & vbCr &_
       "Name: "   & result(firstname) & vbCr &_
       "Height: " & result(height)    & vbCr &_
       "Weight: " & result(weight)    )

生成的消息框显示:
  Age: 76 
  Name: 76 
  Height: 76 
  Weight: 76 

这似乎会将结果数组中的每个元素都赋值为76,而这应该仅赋值给“weight”元素。
这是因为VBScript只接受整数作为数组的键/索引吗?
非常感谢任何帮助。
谢谢
Turgs

顺便提一下,你得到76的原因是因为你所有的“键”都被解释为未定义的变量,这些变量在没有警告的情况下被计算为零 - We Are All Monica
4个回答

10
为了实现这个目的,你需要使用来自Scripting库的Dictionary对象:-
Dim result : Set result = CreateObject("Scripting.Dictionary")
result.Add "Age", 60
result.Add "Name", "Tony"

等等。您可以这样检索项目:

Dim age : age = result("Age")

不过,如果你有一组固定的标识符,你可以考虑定义一个类:

Class CResult
    Public Age
    Public Name
End Class

Dim result : Set result = new CResult
result.Age = 60
result.Name = "Tony"

MsgBox "Age: "    & result.Age       & vbCrLf & _
   "Name: "   & result.Nname) & vbCrLf

顺便说一句,通常我们在换行时使用CR LF而不仅仅是CR。此外,如果您将方法或函数用作语句(如上面的MsgBox),请勿在参数周围加上 ( )。


6

除了这个页面上的Andrew's solution,我还能够使用VBScript中的Dictionary对象来完成我想要的操作,并使用其他语言中通常使用的关联数组语法:

Dim result 
Set result = CreateObject("scripting.dictionary") 

result("age") = 60 
result("firstname") = "Tony" 
result("height") = 187 
result("weight") = 76 

msgbox("Age: "       & result("age")       & vbCr &_ 
      "First Name: " & result("firstname") & vbCr &_ 
      "Height: "     & result("height")    & vbCr &_ 
      "Weight: "     & result("weight")    ) 

关于字典对象的更多信息可以在这里找到: http://www.microsoft.com/technet/scriptcenter/guide/sas_scr_ildk.mspx

我希望这对其他试图做同样事情的人有所帮助。

感谢Richard Mueller通过 Usenet组提供了这个解决方案。

干杯

Turgs


0

VBScript只允许使用整数索引。话虽如此,您可以声明整数常量来提供所需的功能。

如果您需要一个命名数组(就像上面的例子),那么您可能需要某种字典。


0

OP的代码实际上可以通过完全的黑客方式使其工作。这很重要,因为一些老编码人员使用了这种方法,可能有助于学习这种黑客技巧。

因此,要使以下“标识符”起作用,即年龄/名字/身高/体重:

result(age)
result(firstname) 
result(height)  
result(weight) 

窍门是将它们定义为变量或全局变量,并将其正确排序的索引。当然,这可以通过编程方式完成:

'Creates variables that map the field name to its position in the Array.
Private Sub CreateArrayIdentifiersAsGlobalVariables(fieldNames)
    Dim globalVariablesToCreate
    Dim fieldNameIndex
    fieldNameIndex = 0
    For Each fieldName In fieldNames
        If Len(fieldName) > 0 Then
            globalVariablesToCreate = globalVariablesToCreate & "fieldName & "=" & fieldNameIndex & vbCrLf
            fieldNameIndex = fieldNameIndex + 1
        End If
    Next
    Execute globalVariablesToCreate
End Sub

"fieldNames" 应该是一个包含所有字符串字段名称的数组。

所以你会用数组 "age, firstname, height, weight" 调用该函数。然后,举例来说,你会得到 "age" 作为全局变量的取值为整数 0,firstname 取值为 1,然后 "result(age)" 和 "result(firstname)" 就会按预期工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接