2011-08-31 87 views
2

我不知道这是可行的,也许使用LINQ,但我有一个List(Of MyType)VB.NET(或C#)从现有列表创建字典不用循环

Public Class MyType 

    Property key As Char 
    Property description As String 
End Class 

而且我想使用键字段作为字典键,并在List作为字典值的值来创建Dictionary(Of Char, MyType),喜欢的东西:

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

即使这是可行的,在内部它会通过所有的列表项环,我猜测?

回答

7

为此由ToDictionary extension method满足:

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

即使这是可行的,在内部,将通过所有的列表项环,我猜?

当然。实际上,一个没有循环的实现可以想象的,但会导致字典查找效率非常低(这种实现会在现有列表上创建一个视图而不是副本)。这只是一个可行的策略非常小小字典(< 10项,说)。

2

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

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

但不会帮助你增加的项目。

2

在C#中存在ToDictionary<TKey, TSource>,但肯定会循环:-)

你会喜欢的东西称之为:myCollection.ToDictionary(p => p.key)。在VB.NET我觉得语法是myCollection.ToDictionary(Function(p) p.key)