我需要在vbscript中对一个二维数组进行洗牌,有人告诉我可以在sql查询中使用newid()
,但是我没有使用sql server。
我在网上看到了关于LBound
和UBound
的一些内容,但并不是很了解。
有人可以帮助我理解或告诉我最好的方法吗?
提前致谢。到目前为止,这是我的代码。
sql = "SELECT * FROM Questions"
recordset.Open sql, connection
If Not recordset.EOF Then
nQuestions = recordset.RecordCount
questions = recordset.GetRows(nQuestions, 0)
If IsArray(questions) Then
(...)
End If
End If
答案 0 :(得分:1)
回答与UBound
和LBound
相关的部分问题:
LBound
和UBound
是数组的下限和上限。您可以指定两个参数,即数组名称和要计数的维度,例如:
Dim myArr(10, 8)
Dim firstDim, secondDim
firstDim = UBound(myArr, 1) ' The 1 here requests the size of the first dimension of the array
secondDim = UBound(myArr, 2) '... and this, the second.
此处,firstDim
将保持数组第一维的大小(即10),secondDim
保持第二维(即8)。
显然LBound
适用于最低维度,但实际上只用于基数不是通常为零的数组(可能来自COM对象)。
- 编辑 -
为了进一步扩展,你可以使用Access中的一个函数来解决这个问题,但它确实会大大减慢这个过程。
您需要创建一个查询来选择您的数据。选择包含您问题的表格。将问题所需的所有列拖放到底部的网格中。在网格类型最右侧列的Field
框中,类似于:
randomiser: Rnd([questionId])
(显然questionId
是问题的唯一ID。)
这将为您提供最后一列中随机数(从0到1)的问题列表。现在将此列的排序顺序更改为Ascending
,您还可以在查询中添加TOP
子句,以便为您提供特定数量的问题。
因为为Rnd
函数中的每一行指定了一个参数,所以每次都必须执行该参数,这与简单地放置Rnd()
不同。另请注意,如果您运行查询并单击其中一个随机字段,则数字会更改。
这里要记住的一件事是,如果其中一个字段中有一个空(NULL)值,则排序将失败。