2011-10-03 46 views
2

有人可以建議我應該用什麼Linq運算符來編寫一個優雅的代碼轉換List到Dictionary的列表?例如,我有一個人的名單(List<Person>),我想把它轉換成列表字典(例如Dictionary<string, List<Person>>使用人的姓氏作爲關鍵字,我需要這個名稱以便快速查找人名單列表到字典轉換使用Linq

回答

6

要獲得Dictionary<string, List<Person>>List<Person>

var dictionary = list 
        .GroupBy(p => p.LastName) 
        .ToDictionary(g => g.Key, g => g.ToList()); 
3

這個是不是你問什麼,但你可以使用菲利普響應爲:-)

var lookup = myList.ToLookup(p => p.Surname); 

這將創建一個ILookup<string, Person>這是非常類似的東西給你想要的東西(你不會有一個Dictionary<string, List<Person>>但一些更類似於Dictionary<string, IEnumerable<Person>>ILookup是隻讀)

+0

如果有重複的姓氏,就不會這樣 – Joe

+0

@Joe對。糾正。 – xanatos

+0

現在,對於丹尼爾的目的,這可能是比我更好的答案。 – Philip

0

你也可以爲使用如下。

foreach(var item in MyList) 
{ 
    if(!myDictionary.Keys.Contains(item)) 
    myDictionary.Add(item,item.value); 
}