我想知道如何创建一个可以包含整数和字符串的多维数组。
我正在创建一个阵列来存放扑克牌:
deck(0,0)= 2
deck(0,1)= Hearts
我也想改组阵列。最好的方法是什么?
答案 0 :(得分:2)
您不应该使用这样的多维数组,原因如下:
如果要混合数据类型,数组类型将是对象,并且您需要在使用它们时转换每个值。
属于一起的值之间的关系就在您编写的代码中,因此编译器无法帮助您避免混合来自不同项目的值。
项目的属性只是用数字标识,最好给它命名。
为项目创建自定义类:
Public Class Card
Public Property Value As Integer
Public Property Suit As String
End Class
Dim deck As New List(Of Card)
或使用存在的:
Dim deck As New List(Of Tuple(Of Integer, String))
Tuple
类很容易使用,因为它已经存在,但属性的名称(Item1
和Item2
)并不具有描述性。
答案 1 :(得分:1)
扩展使用类的概念,包含带有新构造函数的卡片组的类和shuffle方法将整理起来:
Public Class Card
Public Property Value As Integer = 0
Public Property Suit As Suits
Enum Suits
Hearts = 1
Clubs = 2
Spades = 3
Diamonds = 4
End Enum
Public Overrides Function ToString() As String
Return Value.ToString + "of" + Suit.ToString
End Function
End Class
Public Class Deck
Public Shared Cards(51) As Card
Shared Sub New()
For I = 1 To 4
Dim CurrentSuit = CType([Enum].ToObject(GetType(Card.Suits), I), Card.Suits)
For J = 1 To 13
Cards((((I - 1) * 13) + J) - 1) = New Card With {.Value = J, .Suit = CurrentSuit}
Next
Next
End Sub
Public Sub Shuffle()
Dim rnd As New Random(Now.Millisecond)
For i = 0 To 51
Dim tempindex = rnd.Next(0, 52)
Dim tempcard = Cards(tempindex)
Cards(tempindex) = Cards(i)
Cards(i) = tempcard
Next
End Sub
End Class
Dim CurrentDeck As New Deck()
将所有卡片按顺序初始化。调用Shuffle
方法会将准备好处理的卡片随机播放(CurrentDeck.Shuffle
)。