dict.Add("Tom", New Person())
dict.Add("John", New Person With {.Age = 25})
dict.Add("Jane", New Person With {.Name = "Jane", .Age = 30})
辞書内のデータは構造体なので、辞書キーを追加し、一時変数を使用せずに直接パラメータに値を代入します。
ディクショナリの値が構造体型の場合、一時変数を使用せずにパラメータに値を直接割り当てることができます。以下に例を示します。 @code
上の例では、2 つのメンバー変数 Name と Age を持つ Person という名前の構造体タイプを定義しました。次に、キーの型が String、値の型が Person である辞書オブジェクト dict を作成しました。
ディクショナリのキーと値のペアを追加するときは、パラメーター内で New Person を直接使用して Person 構造体のインスタンスを作成し、オブジェクト初期化子を通じてそのメンバー変数に値を割り当てます。これにより、一時変数を使用せずに、構造体のインスタンスを値としてディクショナリの Add メソッドに直接渡すことができます。
最後に、キーによって辞書内の値にアクセスし、Console.WriteLine を使用してコンソールに値を出力します。
構造内のパラメータは、入力する値を少なくしても、しなくても構いません。
Module Module1
Structure Person
Public Name As String
Public Age As Integer
End Structure
Sub Main()
Dim dict As New Dictionary(Of String, Person)()
' 直接在参数中赋值
dict.Add("Tom", New Person())
dict.Add("John", New Person With {.Age = 25})
dict.Add("Jane", New Person With {.Name = "Jane", .Age = 30})
' 访问字典中的值
Console.WriteLine("Name: " & dict("John").Name & ", Age: " & dict("John").Age)
Console.WriteLine("Name: " & dict("Jane").Name & ", Age: " & dict("Jane").Age)
Console.ReadLine()
End Sub
End Module
質問: 構造体のデータは直接変更できません。パブリック クラスが辞書のデータとして使用されている場合、変更できますか? パブリック クラスは構造体より多くのメモリと CPU オーバーヘッドを消費しますか?
はい、構造体のデータは値型であり、その中の属性値を直接変更することはできず、コピーを作成し、そのコピーを変更することで実現する必要があります。publicクラスは参照型であり、その中の属性値を直接変更できます。
パブリッククラスを辞書のデータとして使用すると、コピーを作成せずにその中の属性値を直接変更できます。以下に例を示します。
この例では、パブリック クラス Person を作成し、それを辞書の値の型にしました。次に、辞書内の「John」キーに対応するパブリック クラス オブジェクトの Age 属性値を 30 に直接変更します。このようにして、辞書内のパブリック クラス オブジェクトの属性値を直接変更することができます。
メモリと CPU オーバーヘッドの問題に関しては、パブリック クラスは通常、構造体と比較してより多くのメモリと CPU オーバーヘッドを占有します。これは、パブリック クラスが参照型であり、そのインスタンスがヒープ上に割り当てられ、参照を保存するために追加のメモリが必要になるためです。構造体は値型であり、そのインスタンスはスタック上に割り当てられるため、参照を保存するために追加のメモリは必要ありません。
ただし、正確なメモリと CPU オーバーヘッドは、実際の使用量とデータ量によって異なります。場合によっては、特に構造体のデータ サイズが小さく、頻繁に渡したりコピーしたりする必要がある場合には、構造体を使用した方が効率的である場合があります。また、特にデータを変更する必要がある場合には、パブリック クラスを使用した方が柔軟で便利な場合もあります。
したがって、構造体またはパブリック クラスの使用を選択する場合は、特定のニーズとパフォーマンス要件に基づいてトレードオフと選択を行う必要があります。
Class Person
Public Name As String
Public Age As Integer
' 其他属性...
End Class
Sub Main()
Dim dict As New Dictionary(Of String, Person)()
' 添加公用类对象到字典
dict.Add("John", New Person With {.Name = "John", .Age = 25})
' 直接修改属性值
dict("John").Age = 30
' 输出修改后的属性值
Console.WriteLine("Name: " & dict("John").Name)
Console.WriteLine("Age: " & dict("John").Age)
Console.ReadLine()
End Sub