我正在尝试使用数组模拟多甲板绘图。发行第一张卡片后,如何从卡组数组中删除此随机数(“ p1”),这样我就可以拥有一个包含51个元素的数组而无需选择第一张卡片?
到目前为止,这是我的做法
Dim deck(1 To 52) As Variant
Dim p1 As Integer
For i = 1 To 52
deck(i) = i
Next
p1 = Int((UBound(deck) * Rnd) + 1)
Sub preflop()
Dim deck() As Integer
Dim p1 As Integer
For i = 1 To 52
ReDim Preserve deck(1 To i) As Integer
deck(i) = i
Next
p1 = Int((UBound(deck) * Rnd) + 1)
For i = LBound(deck) To UBound(deck)
If deck(i) = p1 Then
For j = i To UBound(deck) - 1
deck(j) = deck(j + 1)
Next
End If
Next
ReDim Preserve deck(1 To UBound(deck) - 1) As Integer
End Sub
根据我的评论,这里有一个示例,您可以了解如何为此目的使用ArrayList
:
Sub preflop()
Dim arr As Object: Set arr = CreateObject("System.Collections.ArrayList")
Dim item As Variant, ResultArr As Variant
Dim i As Long, p1 As Long
With arr
'Load all variables
For i = 1 To 52
.Add i
Next i
'Get random number
p1 = ((.Count - 1) - 1) * Rnd
'Remove the random card from the deck
.Remove (p1)
'To use an array in further code somewhere
ResultArr = .Toarray
End With
End Sub