从列表vb.net中创建一个字典

时间:2015-12-08 06:18:45

标签: vb.net dictionary

我有一个包含2列的列表(clm1 = StoreID和clmn2 = ProductID)。 我需要遍历此列表并创建一个字典(StoreID,List(of ProductID)) 我正在使用vb.net。你能帮我完成我必须做的循环吗? 列表数据类似于

StoreID  ProductID
1          234
2          456
1          222
3          768
1          100
9          876
e.t.c.

1 个答案:

答案 0 :(得分:0)

我认为您的数据存储方式有点像这样:

Structure Item
    Public StoreID As Integer
    Public ProductID As Integer
End Structure

Dim l As List(Of Item)

然后你有两个选择。第一个是手动创建字典:

Dim dictionary As New Dictionary(Of Integer, List(Of Integer))
For Each item As Item In l
    Dim subList As List(Of Integer)
    Dim keyExists = dictionary.TryGetValue(item.StoreID, subList)
    If keyExists Then
        subList.Add(item.ProductID)
    Else
        subList = New List(Of Integer)
        subList.Add(item.ProductID)
        dictionary.Add(item.StoreID, subList)
    End If
Next

在这里,您只需迭代所有项目。检查字典是否已包含商店标识的条目。如果是这样,只需添加产品ID。如果没有,请创建一个条目,然后添加产品ID。

如果您不过分关注性能,可以使用以下LINQ表达式来创建字典:

Dim dictionary = l.GroupBy(Function(item) item.StoreID) _
                  .ToDictionary(Function(group) group.Key, _
                                Function(group) group.Select(Function(item) item.ProductID) _
                                                     .ToList())

您首先按照StoreID对元素进行分组。然后,ToDictionary()方法创建字典。它需要两个参数。第一个是指定每个元素的键的函数。在这种情况下,我们希望使用组的键作为字典键(它是商店ID)。第二个参数是插入字典中的值。首先,我们使用Select将每个Item映射到其ProductID(因为我们要存储产品ID而不是整个项目。然后我们调用ToList()来生成列表小组中的项目。