2011-08-31 80 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)