Vb.net 添加新键和值时,将覆盖字典值

Vb.net 添加新键和值时,将覆盖字典值,vb.net,dictionary,multidimensional-array,Vb.net,Dictionary,Multidimensional Array,我试图用4个键填充一个字典,每个键值是一个多维数组(13,7)。第一个键和数组完全填充。填充第二个键时,第一个键和第二个键的值都具有第二个数组迭代值,这将在接下来的2个迭代中继续,直到我有4个键和所有相同的值。我使用手表逐行验证了每个数组是否具有唯一值,每个键是否具有唯一值。任何帮助都将不胜感激 Dim BitMap As New Dictionary(Of String, String(,)) For y = 0 To strDiffEQName.Length - 1 Fo

我试图用4个键填充一个字典,每个键值是一个多维数组(13,7)。第一个键和数组完全填充。填充第二个键时,第一个键和第二个键的值都具有第二个数组迭代值,这将在接下来的2个迭代中继续,直到我有4个键和所有相同的值。我使用手表逐行验证了每个数组是否具有唯一值,每个键是否具有唯一值。任何帮助都将不胜感激

 Dim BitMap As New Dictionary(Of String, String(,))
 For y = 0 To strDiffEQName.Length - 1
        For x = 0 To 1
            Dim intFirst As Integer = Array.IndexOf(rowvalue, "[" & strSTKName & "_" & strSendRecv(x) & "_" & strDiffEQName(y) & "]") 'Find first string in Array (Start Block)
            Dim intSecond As Integer = Array.LastIndexOf(rowvalue, "[" & strSTKName & "_" & strSendRecv(x) & "_" & strDiffEQName(y) & "]") 'Find second string in Array (Stop Block)
            Dim intNum As Integer = 0

            For i As Integer = intFirst + 1 To intSecond - 1 'Loop through array betwween start and stop block
                Dim strHolder() As String 'Array that will temporary hold values until transfered to the strString Array
                strHolder = rowvalue(i).Split(","c) 'load data between commas to the temporary array
                ReDim Preserve strHolder(strHolder.Length - 1) 'Increase rows in array by one
                For k As Integer = 0 To 7
                    strString(intNum, k) = strHolder(k) 'Load temp data into multi-dimensional array
                Next
                intNum = intNum + 1 'Increment to next row in Multi-dimensional array
            Next
            BitMap.Add(strSendRecv(x) & "_" & strDiffEQName(y), strString) 'Transfer Multi-dimensional array to Dictionary
        Next
    Next

如前所述,数组是引用类型。这是无法改变的。如果要将四个项目添加到
字典
,则必须创建四个数组。就这么简单。如果只创建一个数组并将其添加四次,那么显然,无论您查看的是
字典中的哪个项,您都只能看到一组数据


想想这个。比如说,你正在记录人们的名字和他们穿的衬衫的颜色。我穿了一件红衬衫,你把我的细节记下来。然后我穿上一件蓝色的衬衫再次站出来,而你又把我的细节做了一遍。如果你从第一件物品中呼唤我的名字,你会期望我神奇地再次穿上一件红色衬衫,即使我脱下它,穿上一件蓝色衬衫?我只是一个人,不管你把我的名字放在名单上多少次,所以你都会看到我穿的最后一件颜色的衬衫,不管你用什么样的名单来选择我。这就是对象在现实世界中的工作方式,也是对象在编程中的工作方式。

数组是引用类型。将数组添加到迭代1的字典中不会复制数据,而是保存对数据的引用。因此,在下一次迭代中,当您将新数据放入数组(更改它)时,您也在更改字典中的数据,因为它们是相同的数组。您可能只需要为每个迭代创建一个新数组。谢谢您提供的信息。我在每次迭代中都会发现,只要数组中的任何内容发生变化,字典中的值也会发生变化,正如您所说的。话虽如此,我想我需要知道如何使用值而不是引用将数组导入字典。我是否应该使用.tostring()遍历数组中的每个元素并将每个元素添加到字典中?
系统.array
有一个
.CopyTo
函数,您应该能够使用它将内容复制到要存储的新数组变量中。更好的方法是,尝试设计一个类,您可以为每次迭代创建它(数组很糟糕)。在不知道数据代表什么的情况下很难给出建议,它看起来像是从字符串中解析出来的字符。再次感谢您提供的信息。看来我这样做是徒劳的。因为在运行时之前所需的数组数量是未知的,所以我创建了一个带有名称和数组的结构。在运行时,我将结构声明为具有所需元素数的数组。在这一点上,字典是多余的,因此我只需运行结构数组迭代,直到找到正确的名称并使用相应的数组。