2015-12-08 41 views
1

我有一个列2列(clm1 = StoreID和clmn2 = ProductID)。 我需要遍历此列表并创建一个字典(StoreID,List(of ProductID)) 我正在使用vb.net。你能帮我用我必须做的循环吗? 清单数据是一样的东西创建一个列表vb.net

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

参考HTTP:// WWW。 dotnetperls.com/dictionary-vbnet – Sam1604

+0

嗨@ sam1604,我知道如何使用字典,但我不知道如何循环通过我的数据表条到达我需要的结果 – Yannis

回答

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。通过他们的StoreID

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

您第一组的元素:

如果你不是太具有性能而言,你可以使用下面的LINQ表达式来创建字典。然后,ToDictionary()方法创建字典。它需要两个参数。第一个是指定每个元素的键的函数。在这种情况下,我们希望将组的键用作字典键(这是商店ID)。第二个参数是插入字典中的值。首先,我们使用Select每个ItemProductID映射(因为我们想存储产品ID,而不是整个项目然后我们调用ToList()来从该组中的项目清单

+0

很多很多谢谢,这正是我所需要的! – Yannis