如何在vb.net中的Dictionary中进行迭代?

And*_*ndy 28 vb.net dictionary

我创建了一本字典

    Dim ImageCollection As New Dictionary(Of ConvensionImages, Integer)
Run Code Online (Sandbox Code Playgroud)

我填写

 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
Run Code Online (Sandbox Code Playgroud)

现在我想搜索ImageID和密钥我该怎么做呢

And*_*eev 57

Integer为您的字典键:

Dim ImageCollection As New Dictionary(Of Integer, ConvensionImages)
Run Code Online (Sandbox Code Playgroud)

更改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  
Run Code Online (Sandbox Code Playgroud)


Sys*_*gon 15

你也可以这样循环:

For Each iKey As Integer In ImageCollection.Keys
    Dim value As ConvensionImages = ImageCollection(iKey)
    '...
Next
Run Code Online (Sandbox Code Playgroud)

这是非常快速和简单的方法.

  • 它可能不会那么快。在循环内部,您正在为每次迭代在字典中搜索键。您应该使用类似`for each pair in ImageCollection` 并在循环内使用`pair.Value` (2认同)
  • 如果您考虑 @Emanuele Benedetti 的评论,还请考虑:“使用键检索值非常快,接近 O(1),因为 Dictionary<TKey,TValue> 类是作为哈希表实现的。” [来源](https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.dictionary-2?view=net-5.0) (2认同)