Visual Basic 2013中包含String和Integer的多维数组

时间:2014-04-08 21:21:57

标签: vb.net visual-studio-2012

我想知道如何创建一个可以包含整数和字符串的多维数组。

我正在创建一个阵列来存放扑克牌:

deck(0,0)= 2
deck(0,1)= Hearts

我也想改组阵列。最好的方法是什么?

2 个答案:

答案 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类很容易使用,因为它已经存在,但属性的名称(Item1Item2)并不具有描述性。

答案 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)。