Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 多次使用同一键的VB字典_.net_Arrays_Vb.net_For Loop_Dictionary - Fatal编程技术网

.net 多次使用同一键的VB字典

.net 多次使用同一键的VB字典,.net,arrays,vb.net,for-loop,dictionary,.net,Arrays,Vb.net,For Loop,Dictionary,一本字典有可能多次使用同一个键吗?我环顾了很多地方,答案似乎是肯定的。我正在从csv文件中读取cc编号,并将其添加到字典中。大多数说“不”的帖子通常表示,多次添加一个键会引发异常。这肯定是错误的,因为我没有遇到这个问题。 基本上我有这本字典 Dim allCalls As New Dictionary(Of String, Array) 我正在这样填充它 Dim Path As String = My.Application.Info.DirectoryPath & "\Calls.

一本字典有可能多次使用同一个键吗?我环顾了很多地方,答案似乎是肯定的。我正在从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()

这部分工作得很好,但如果我在添加同一个密钥时覆盖了我的旧数据,我无法告诉您。然而,对我来说,这似乎是违反直觉的,因为它不会引起某种问题。基本上,我的目标是能够搜索这个东西的一个关键点,并得到所有的数组数据回来,我不知道如何做。我甚至不知道它是否还在那里,所以任何关于如何使用这些东西的帮助都会很好

如果您至少使用.NET 3.5,则可以使用该类

查找
类似于
字典
。这个 不同之处在于
字典将键映射到单个
值,而
查找将键映射到
价值观

没有公共构造函数来创建
查找的新实例。此外,
Lookup
对象是不可变的,也就是说,在创建了
Lookup
对象之后,您不能从中添加或删除元素或键

但您可以使用:

一个键可以返回零、一个或多个值:

Dim calls = allCalls("Key")
For Each c As String In calls
    ' ... '
Next

请注意,如果密钥不存在,则不会出现异常。Sequence将是空的。

我最终使用了ArrayList字典,并将数组添加到该字典中。您不能在同一个密钥上多次存储,但检查它是否存在并添加到arraylist中效果良好

似乎没有用于此操作的内置功能。您可以做的是制作一个字典,它的值的类型是列表。然后,当添加到字典中时,您需要检查键是否存在,并将值添加到保留同一键的所有值的列表中。在
reader.Close()
上设置一个中断,然后将鼠标悬停在
allCalls
上,您将能够查看其中的内容。字典键是/必须是唯一的,否则将无法获取正确的数据。使用
allCall.ContainsKey
测试密钥是否已经存在
allCalls(key)=newData
将替换与该键关联的数据。如果您至少使用.NET 3.5,则可以使用该类。答案为否。在CSV文件的第一列中具有唯一值并不少见。它通常类似于订单ID。如果你说的是
字典
Dim calls = allCalls("Key")
For Each c As String In calls
    ' ... '
Next