VB.NETのディクショナリーオブジェクトでハマったよ。
とある処理で、各タイプごとの集計するとき、
データテーブルがとっても使いづらかったのでディクショナリーを使ってみた。
ハマったソース
ディクショナリー1
Dim dc1 As New Dictionary(Of Integer, Dictionary(Of Integer, String))
ディクショナリー2
Dim dc2 As New Dictionary(Of Integer, Dictionary(Of Integer, String))
'ディクショナリーをセット
For iDcset As Integer = 1 To 3
Dim dcTemp As New Dictionary(Of Integer, String)
'キーをセット
For iKeyset As Integer = 1 To 3
dcTemp.Add(iKeyset, 0)
Next
dc1.Add(iDcset.ToString, dcTemp)
dc2.Add(iDcset.ToString, dcTemp)
Next
'バリューを入れる
dc1(1)(1) = "A"
dc1(1)(2) = "B"
dc1(2)(1) = "C"
dc1(2)(2) = "D"
dc1(3)(1) = "E"
dc1(3)(2) = "F"
dc2(1)(1) = "1"
dc2(1)(2) = "2"
dc2(2)(1) = "3"
dc2(2)(2) = "4"
dc2(3)(1) = "5"
dc2(3)(2) = "6"
’出力
Debug.WriteLine("ディクショナリー1: 値" & dc1(1)(1))
Debug.WriteLine("ディクショナリー1: 値" & dc1(1)(2))
Debug.WriteLine("ディクショナリー1: 値" & dc1(2)(1))
Debug.WriteLine("ディクショナリー1: 値" & dc1(2)(2))
Debug.WriteLine("ディクショナリー1: 値" & dc1(3)(1))
Debug.WriteLine("ディクショナリー1: 値" & dc1(3)(2))
Debug.WriteLine("ディクショナリー2: 値" & dc2(1)(1))
Debug.WriteLine("ディクショナリー2: 値" & dc2(1)(2))
Debug.WriteLine("ディクショナリー2: 値" & dc2(2)(1))
Debug.WriteLine("ディクショナリー2: 値" & dc2(2)(2))
Debug.WriteLine("ディクショナリー2: 値" & dc2(3)(1))
Debug.WriteLine("ディクショナリー2: 値" & dc2(3)(2))
結果
ディクショナリー1: 値1
ディクショナリー1: 値2
ディクショナリー1: 値3
ディクショナリー1: 値4
ディクショナリー1: 値5
ディクショナリー1: 値6
ディクショナリー2: 値1
ディクショナリー2: 値2
ディクショナリー2: 値3
ディクショナリー2: 値4
ディクショナリー2: 値5
ディクショナリー2: 値6
値
が
上
書
き
されてる。。
犯人は
'ディクショナリーをセット
For iDcset As Integer = 1 To 3
Dim dcTemp As New Dictionary(Of Integer, String)
↑こいつ!
まだまだ素人のわたしには、いまいち理解できず、
こいつが参照しちゃってる??というのか、なんなのか、、、
なので、もうひとつ作ってやった。
'ディクショナリーをセット
For iDcset As Integer = 1 To 3
Dim dcTemp1 As New Dictionary(Of Integer, String)
Dim dcTemp2 As New Dictionary(Of Integer, String)
'キーをセット
For iKeyset As Integer = 1 To 3
dcTemp1.Add(iKeyset, 0)
dcTemp2.Add(iKeyset, 0)
Next
dc1.Add(iDcset.ToString, dcTemp1)
dc2.Add(iDcset.ToString, dcTemp2)
Next
なんか嫌だよーーー。