1

私は最近、辞書がキーごとに 1 つの値しか許可しないという問題に遭遇しました。周りを読んで、クラスを介して型を作成することを示唆する複数の回答を見てきました。確かに、私はクラスについてあまり知りませんが、クラスは関数とサブルーチンの単なるコレクションであるといつも思っていました。なぜ彼らはデータ型を作成できるのでしょうか? また、そのためにどのように使用しますか?

4

3 に答える 3

5

a の基本的な定義はDictionaryで与えられDictionary(Of type1, type2)ます。ここで、型はプリミティブ型 ( 、 など) またはユーザーが作成したもの (たとえば を介して) であれば何でもStringかまいDoubleませんClassListsまた、それらを「個々の変数」またはコレクション内 ( 、Arraysなど)として説明することもできます。いくつかの例:

 Dim dict = New Dictionary(Of String, List(Of String))

 Dim tempList = New List(Of String)
 tempList.Add("val11")
 tempList.Add("val12")
 tempList.Add("val13")

 dict.Add("1", tempList)

 Dim dict2 = New Dictionary(Of String, type2)
 Dim tempProp = New type2
 With tempProp
     .prop1 = "11"
     .prop2 = "12"
     .prop2 = "13"
 End With
 dict2.Add("1", tempProp)

 Dim dict3 = New Dictionary(Of String, List(Of type2))
 Dim tempPropList = New List(Of type2)
 Dim tempProp2 = New type2
 With tempProp2
     .prop1 = "11"
     .prop2 = "12"
     .prop2 = "13"
 End With
 tempPropList.Add(tempProp2)

 dict3.Add("1", tempPropList)

Wheretype2は次のクラスによって定義されます。

Public Class type2
    Public prop1 As String
    Public prop2 As String
    Public prop3 As String
End Class

注: 上記の例のタイプは、必要に応じて変更できます。Valuesまた、との両方に何か (リスト、カスタム タイプなど) を入れKeysます。

注 2: VB.NET のプリミティブ型 (例: Double) は、基本的には一連の変数 (特定のフレームワーク内でグローバルに宣言されている) と関数: Double.IsInfinity(関数)、Double.MaxValue(変数) などです。つまり、関数と変数のグループの一般名であり、別のクラスで別の変数を定義するために使用できます。提案された例はかなり説明的だと思います。

于 2013-08-19T07:48:28.883 に答える
1

クラスは関数とサブルーチンだけではなく、変数とプロパティも含まれています。これは、一連の値を格納するために使用できます。

人の名前と姓を人番号で辞書に保存したいとしましょう。

Public Class Person
    Public Property Number As String
    Public Property FirstName As String
    Public Property LastName As String
End Class

Dim dict = New Dictionary(Of String, Person)
Dim p = New Person

p.Number = "A123"
p.FirstName = "John"
p.LastName = "Doe"

dict.Add(p.Number, p)

そして、その人を取り戻すために

p = dict("A123")

Console.WriteLine(p.FirstName)
Console.WriteLine(p.LastName)
于 2013-08-19T13:36:01.297 に答える
0

これと他のソースからの知識を組み合わせた後、これが私の最終的な解決策です。

Public Class Form1

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim dictionary = New Dictionary(Of String, Pair)
        Dim p As New Pair("A", "B")

        MsgBox(p.First)
        MsgBox(p.Second)
    End Sub
End Class

Public Class Pair
    Private ReadOnly value1 As String
    Private ReadOnly value2 As String

    Sub New(first As String, second As String)
        value1 = first
        value2 = second
    End Sub

    Public ReadOnly Property First() As String
        Get
            Return value1
        End Get
    End Property

    Public ReadOnly Property Second() As String
        Get
            Return value2
        End Get
    End Property
End Class
于 2013-08-19T20:24:27.857 に答える