字符串数组作为值导致重复键错误

时间:2016-03-14 09:30:31

标签: .net arrays vb.net dictionary duplicates

我想使用Dictionary为密钥存储多个字符串。

例如,Key将是“The Beatles”,而Strings数组将包含我拥有的所有“Records”。下一个关键是“滚石乐队”,这将包含我为这个乐队所拥有的所有唱片等等。

当我查看我拥有的记录列表时,我想从文本文件中更新字典,并向数组中添加更多记录。

这可能吗?我不断收到“已添加相同密钥的项目”错误消息。

 Dim Records_I_Own As New Dictionary(Of String, String())

 For each Line in Lines_I_Read

     ....
     ....
     Records_I_Own.Add(Band, Record)
     ....
     ....

 Loop

2 个答案:

答案 0 :(得分:2)

使用

Dictionary(of String, List(of String))

而不是数组。所以你可以添加

...
if Not Records_I_Own.containsKey(Band) then
  Records_I_own.Add(Band, New List(of String))
End If
Records_I_Own(Band).Add(Record)
....

答案 1 :(得分:2)

每次读取一行时都会添加一个波段并进行录制。当你进入你已经添加的乐队时,你会收到这个错误,因为字典的重点是没有重复的键。

您需要做的是将记录添加到乐队的字符串数组中。

您需要检查是否已有乐队(key

所以你需要做这样的事情:

 For each Line in Lines_I_Read

     ....
     ....
     If Records_I_Own.ContainsKey(Band) Then
         'We already have this artist so add a new record to the value collection 
         'get the array
         Dim records as String() = Records_I_Own(Band)
         'extend the array
         ReDim Preserve records(records.Count)
         'add the new record on the end
         records(records.Count - 1) = record
         'copy the array back to the dicationary value
         Records_I_Own(Band) = records
     Else     
         'Add it as a new key and value
         Records_I_Own.Add(Band, Record)
     Endif

     ....
     ....

 Loop

请注意,如果您使用List(of String)而不是字符串数组,那么这样做会更容易,因为您只需调用.Add而不必扩展数组