从整数数组中删除元素

问题描述 投票:1回答:2

我正在尝试使用数组模拟多甲板绘图。发行第一张卡片后,如何从卡组数组中删除此随机数(“ 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)
excel vba
2个回答
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

0
投票

根据我的评论,这里有一个示例,您可以了解如何为此目的使用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
© www.soinside.com 2019 - 2024. All rights reserved.