2013-09-05 4 views
19

は私が辞書vb.netで辞書をどのように反復することができますか?

Dim ImageCollection As New Dictionary(Of ConvensionImages, Integer) 

を作成して、私は

For Each dr As DataRow In dt.Rows 
      Dim obj As New ConvensionImages 
      obj.ImageID = dr("ID") 
      obj.Name = dr("Name") 
      obj.Description = dr("Description") 
      obj.CategoryID = dr("CategoryID") 
      obj.CategoryName = dr("CategoryName") 
      obj.CategoryDescription = dr("CatDescription") 
      obj.EventID = dr("EventID") 
      obj.Image = dr("img") 
      obj.DownloadImage = dr("DownLoadImg") 
      ImageCollection.Add(obj, key) 
      key = key + 1 

は今、私はこの

答えて

43

があなたの辞書のキーとしてIntegerを作る行うことができますどのようにIMAGEIDを検索すると、そのキーを入力します。

Dim ImageCollection As New Dictionary(Of Integer, ConvensionImages) 

変更ImageCollection.Add(obj, key)

ImageCollection.Add(key, obj)し、このループを使用します。

For Each kvp As KeyValuePair(Of Integer, ConvensionImages) In ImageCollection 
    Dim v1 As Integer = kvp.Key 
    Dim v2 As ConvensionImages = kvp.Value 
    'Do whatever you want with v2: 
    'If v2.ImageID = .... Then 
Next 
+1

ループ内のKeyValuePairの定義を '(Of Integer、ConvensionImages) 'に変更する必要があります – Heslacher

+0

@Heslacherあなたの権利はありがとう –

13

することができますあまりにもループをこのように、:

For Each iKey As Integer In ImageCollection.Keys 
    Dim value As ConvensionImages = ImageCollection(iKey) 
    '... 
Next 

それはそれに非常に高速かつ簡単な方法です。

+0

それほど速くないかもしれません。ループ内では、すべての反復のために辞書内のキーを検索しています。 'ImageCollectionの各ペアに'のようなものを使用し、ループの内部で 'pair.Value'を使うべきです –