私は最近、辞書がキーごとに 1 つの値しか許可しないという問題に遭遇しました。周りを読んで、クラスを介して型を作成することを示唆する複数の回答を見てきました。確かに、私はクラスについてあまり知りませんが、クラスは関数とサブルーチンの単なるコレクションであるといつも思っていました。なぜ彼らはデータ型を作成できるのでしょうか? また、そのためにどのように使用しますか?
3 に答える
a の基本的な定義はDictionary
で与えられDictionary(Of type1, type2)
ます。ここで、型はプリミティブ型 ( 、 など) またはユーザーが作成したもの (たとえば を介して) であれば何でもString
かまいDouble
ませんClass
。Lists
また、それらを「個々の変数」またはコレクション内 ( 、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
(変数) などです。つまり、関数と変数のグループの一般名であり、別のクラスで別の変数を定義するために使用できます。提案された例はかなり説明的だと思います。
クラスは関数とサブルーチンだけではなく、変数とプロパティも含まれています。これは、一連の値を格納するために使用できます。
人の名前と姓を人番号で辞書に保存したいとしましょう。
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)
これと他のソースからの知識を組み合わせた後、これが私の最終的な解決策です。
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