我想使用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
答案 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
而不必扩展数组