【问题标题】:VB.NET (or C#) creating a Dictionary from an existing List without loopingVB.NET(或 C#)从现有列表创建字典而不循环
【发布时间】:2011-08-31 13:38:37
【问题描述】:

我不知道这是否可行,也许使用 Linq,但我有一个 List(Of MyType)

Public Class MyType

    Property key As Char
    Property description As String
End Class

我想创建一个Dictionary(Of Char, MyType),使用键字段作为字典键,List 中的值作为字典值,类似于:

New Dictionary(Of Char, MyType)(??)

即使这是可行的,我猜它会在内部循环遍历所有列表项?

【问题讨论】:

    标签: vb.net linq-to-objects containers


    【解决方案1】:

    这个目的由ToDictionary extension method实现:

    Dim result = myList.ToDictionary(Function (x) x.key, Function (x) x.description)
    

    即使这是可行的,我猜它会在内部循环遍历所有列表项?

    当然。事实上,不循环 的实现是可以考虑的,但会导致查找字典的效率非常低(这样的实现会在现有列表上创建一个 view,而不是的副本)。这仅适用于 非常 个小字典(例如,

    【讨论】:

      【解决方案2】:

      在 C# 中有 ToDictionary<TKey, TSource>,但它会循环 :-)

      你可以这样称呼它:myCollection.ToDictionary(p => p.key)。在 VB.NET 中,我认为语法是 myCollection.ToDictionary(Function(p) p.key)

      【讨论】:

        【解决方案3】:

        是的,它将遍历所有列表项。您可以做的另一件事是为您的列表创建一个KeyedCollection

        public class MyTypeCollection : KeyedCollection<char, MyType>
        {
           protected override char GetKeyForItem(MyType item)
           {
              return item.key;
           }
        }
        

        但这无助于您添加项目。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-12-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多