我有一个包含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.
答案 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()
来生成列表小组中的项目。