使用Linq将列表转换为字典

3
有人可以建议我使用哪个Linq操作符来编写优雅的代码将List转换为Dictionary of list吗? 例如,我有一个人的列表(List<Person>),我想将其转换为字典列表(例如Dictionary<string,List<Person>>),并使用人的姓作为键。我需要快速查找人的姓氏对应的人员列表。
3个回答

7

List<Person> 获取一个 Dictionary<string, List<Person>>

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

3

虽然这不是你要求的内容,但你可以使用Philip的回答来解决这个问题 :-)

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

这将创建一个ILookup<string, Person>,它与您想要的非常相似(您不会有一个Dictionary<string, List<Person>>,而是更类似于Dictionary<string, IEnumerable<Person>>,而且ILookup是只读的)。

如果有重复的姓氏,它就不会起作用。 - Joe
这可能是对于丹尼尔的目的比我的回答更好。 - Philip
@Philip,只读性通常是一个阻碍因素(因为你有一个IEnumerable而不是IList)。不同的问题有不同的解决方案。 - xanatos

0

你也可以按照以下方式使用。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接