如果有很多问题,选择五个而不重复怎么做?非常感谢你的帮助
我的GetQuestion代码
Public Function GetQuestion( Byval QuestionNumber )
On Error Resume Next    
Dim MyUIWorkspace As New NotesUIWorkspace
Dim MyDoc As NotesDocument
Set MyDoc = MyUIWorkspace.CurrentDocument.Document
Dim Question
Dim LineNo
LineNo = 0
Forall Tmp In MyDoc.GetFirstItem( "Questions" ).Values
    If LineNo = QuestionNumber Then Question = Tmp
    LineNo = LineNo +1
End Forall
LineNo = 0
Forall Tmp In MyDoc.GetFirstItem( "Answers" ).Values
    If LineNo = QuestionNumber Then Answers = Tmp
    LineNo = LineNo +1
End Forall
Dim MyVar() As Variant
Redim MyVar(1)
MyVar(0) = Question
MyVar(1) = Answers
GetQuestion = MyVar
End Function视图

发布于 2022-09-01 03:44:23
创建一个函数从数组中获取任意数量的值.
%REM
  WARNING: Modifies array argument
  n must be between <code>1</code> and < code>UBound(array) + 1</code>
%END REM
Function GetNRandomFromArray(array As Variant, ByVal n As Integer)
  Dim aRet(n - 1) As Variant
  Dim r as Integer
  Dim u as Integer
  u = UBound(array)
  For iRet = 0 To n - 1
    iFrom = Int(Rnd * (u + 1)) 'Random number from 0 to u
    aRet(iRet) = array(iFrom)
    If iFrom <> u Then array(iFrom) = array(u)
    u = u - 1 'decrement the number of questions to choose from in the next iteration
  Next iRet
  GetNRandomFromArray = aRet
End Function现在你可以做了
Dim aRandomQuestions As Variant
aRandomQuestions = GetNRandomFromArray(MyDoc.Questions, 5)(注意:MyDoc.Questions和MyDoc.GetFirstItem( "Questions" ).Values都返回一个值数组,这是一个快照.更改该数组不会自动影响字段的值。)
发布于 2022-09-01 02:42:19
先数数问题。你已经这么做了。LineNo变量中有计数。
接下来,用一个数组来表示问题,并将所有问题读入数组中。(请注意,您可以通过重复使用redim将前两个步骤组合为一个步骤。我倾向于不喜欢那样做,但这完全没问题。)
接下来,使五个整数的数组变暗。并使用随机化语句为LotusScript的随机数生成器添加种子,并使整数列表变小。
接下来,将计数器初始化为零,并执行在计数器>4时退出的while循环。在循环体中,使用Int(Rnd() * LineNo)生成0到LineNo减1范围内的随机整数。如果它在列表中,则在不增加计数器的情况下循环。如果它不在列表中,那么将其添加到列表中,并将计数器用作整数数组中的索引,并将数组中的元素设置为随机积,and+增加计数器。
此时,您有一个问题数组,并且在问题数组中有另一个随机索引数组。
最后,执行一个从0到4的循环。在循环体中,从整数数组中读取一个索引,并使用它从问题数组中读取一个问题。
https://stackoverflow.com/questions/73563311
复制相似问题