如何向(string, list(of string))字典的列表部分插入值?

4
我正在使用VB中的dictionary(of string,list(of string))来存储从大型.csv文件中提取的一些文本数据。 字典.key只是一个日期字符串,例如“2012-12-12”,相应的list值包含与该日期相关联的所有文件。
使用StreamReaderline.split,我可以提取日期字符串并将其与字典进行比较。如果字典不包含该日期,则要将其插入为新键,然后将文件名添加到该键的列表中。这将循环遍历整个文件,然后通过使用相同的字典继续遍历用户选择的每个文件。最终,每个日期应该看到4或5个文件名,对于每个日期不允许重复的文件名。
正确使用dictionary.add方法的方式是什么?

你尝试过什么?请发布你的代码并解释你卡在哪里了。 - Oded
起初我尝试了一个简单的"If..."语句:If Not dictionary.ContainsKey(string) then dictionary.add(string, string),认为第二个字符串会自动放入相应的列表中。但是这会生成一个错误:"类型为String的值无法转换为Systems.Collections.Generic.List(Of String)"。 - Mellonjollie
嗯,没错,一个 string 不是一个字符串列表... 当向字典中添加内容时,你需要添加一个新的 列表 并将值添加到该列表中。 - Oded
接着我尝试单独创建一个文件名列表,然后将该列表插入到字典的相应键值下,但这似乎过于冗长并且难以管理,特别是当要处理的日期和文件数量未知时。 - Mellonjollie
有道理,Oded。让我试试看。 - Mellonjollie
1个回答

5

something like this?

Dim key as String = "asdf"
If Not dict.ContainsKey(key) Then
    dict.Add(key, New List(Of String)(New String() {"1", "2", "3"}))
    Dim values = dict(key)
    If not values.Contains("some value") Then
        values.Add("some value")
    End If
End If

或者类似这样的东西:
Dim key as String = "asdf"
If Not dict.ContainsKey(key) Then
    dict.Add(key, New List(Of String))
    dict(key).Add("1")
    dict(key).Add("2")
    ... and however many more values here ...
End If

你的第一个例子非常好,谢谢。现在我该如何检查存储在列表中与某个键对应的值与另一个字符串是否匹配,然后将该字符串插入到该键的列表中(如果它还不存在)? - Mellonjollie
@Mellonjollie 我更新了第一个代码片段,向您展示如何做到这一点。您只需获取与您正在使用的键标识的列表的引用,然后检查该列表是否包含该值。如果没有,则添加它。 - Mike Corcoran
太好了!非常感谢。我不知道为什么我们的教科书从来没有涉及字典或列表。 - Mellonjollie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接