1
ネストされた辞書を作成して変数に割り当て、内側の値の1つを上書きして元の変数の値を変更せずに別の変数に割り当てることはできませんほしくない。これは次の出力が生成さExcel VBA:ネストされた辞書の問題
Option Explicit
Sub Button1_Click()
Dim d_outer As Scripting.Dictionary
Set d_outer = New Scripting.Dictionary
Dim d_inner As Scripting.Dictionary
Set d_inner = New Scripting.Dictionary
Call d_inner.Add("key", "foo")
Call d_outer.Add("first attempt", d_inner)
' Cannot use "Add", since key already exists, must use Item()
d_inner.Item("key") = "bar"
Call d_outer.Add("second attempt", d_inner)
' Print all values.
Dim v_outer As Variant
Dim v_inner As Variant
For Each v_outer In d_outer.Keys()
For Each v_inner In d_outer(v_outer).Keys()
Debug.Print "(" & v_outer & ", " & v_inner & "): '" & d_outer(v_outer)(v_inner) & "'"
Next v_inner
Next v_outer
End Sub
:
(first attempt, key): 'bar'
(second attempt, key): 'bar'
最初の試みの値はfoo
する必要がありますたとえば、次のコードを参照してください。なぜそれがbar
に変更されていますか?これをどうやって解決するのですか?いずれかの値だけを変更するたびに、d_innerの正確なコピーである新しい辞書を作成する必要がありますか?もしそうなら、簡単な方法がありますか?
これらの種類とより柔軟であることを見つけるかもしれません: 'd_inner .Item( "key")= "bar" '最初の試行を' bar'に変更します – CallumDA
はい、私はそれを知っています。しかし、元の(正しい)値を持つ「最初の試行」キーの前の行で既にAdd()メソッドを呼び出しているので、そのキーに関係なく、 – MrSnrub
私の答えで説明します。希望が役立つ – CallumDA