【发布时间】:2013-10-29 04:19:34
【问题描述】:
一个字典是否可以多次使用同一个键?我环顾四周,答案似乎是YesNo。我正在从 csv 文件中读取 cc 数字并将它们添加到字典中。大多数拒绝的帖子通常表明多次添加键会引发异常。这一定是错误的,因为我没有遇到过这个问题。
基本上我有这本字典
Dim allCalls As New Dictionary(Of String, Array)
我正在这样填充它
Dim Path As String = My.Application.Info.DirectoryPath & "\Calls.txt"
Dim reader As StreamReader = My.Computer.FileSystem.OpenTextFileReader(Path)
Dim parts() As String
Dim lines() As String = IO.File.ReadAllLines(Path)
Array.Sort(lines)
For x As Integer = 0 To lines.GetUpperBound(0)
parts = lines(x).Split(CChar(","))
Dim data(1) As String
data(0) = parts(2)
data(1) = parts(5)
allCalls.Add(parts(1), data)
Next
reader.Close()
这部分工作得很好,但就好像我在添加相同的密钥时覆盖了我的旧数据一样,我无法告诉你。然而,这对我来说似乎违反直觉,它不会引起某种问题。基本上我的目标是能够在这个东西中搜索一个键并取回我不知道该怎么做的所有数组数据。我什至不知道它是否还在那里,所以任何关于如何使用这些东西的帮助都会很棒。
【问题讨论】:
-
似乎没有内置功能。您可以做的是制作一个字典,其中包含 List 作为其值的类型。然后,在添加到字典时,您需要检查键是否存在并将值添加到保留同一键的所有值的列表中。
-
在
reader.Close()上设置一个休息点,然后将鼠标悬停在allCalls上,您将能够查看其中的内容。字典键是/必须是唯一的,否则将无法取回正确的数据。使用allCall.ContainsKey测试密钥是否已经存在。allCalls(key) = newData将替换与该键关联的数据。 -
如果您至少使用 .NET 3.5,则可以使用
Lookup类。 -
答案是否定的。在 CSV 文件的第一列中具有唯一值并不罕见。它通常类似于订单 ID。
-
如果你在谈论
Dictionary<Tkey, Tvalue),你永远不能拥有两个相同的键。一旦您尝试添加第二个密钥,就会发生异常,例如“密钥已存在”
标签: .net arrays vb.net for-loop dictionary