列表到词典<key,list <value =“”>&gt; - C#</key,>

时间:2015-03-13 07:14:26

标签: c# list dictionary

我有一个List和MyClass:

public class MyClass
{
    public bool Selected { get; set; }
    public Guid NoticeID { get; set; }
    public Guid TypeID { get; set; }
}

我的问题是,如何将此列表转换为Dictionary<Guid, List<Guid>>,其中字典键是TypeID属性中的GUID,值是所有{{1}的列表对应于NoticeID的值。我试过这样:

TypeID

但这会返回list.GroupBy(p => p.TypeID).ToDictionary(p => p.Key, p => p.ToList()) ,我想要一个Dictionary <Guid, List<MyClass>>

1 个答案:

答案 0 :(得分:18)

好吧,当您分组时,您可以为该组的每个元素指定所需的值:

var dictionary = list.GroupBy(p => p.TypeID, p => p.NoticeID)
                     .ToDictionary(p => p.Key, p => p.ToList());

但是,我强烈考虑使用查找而不是字典:

var lookup = list.ToLookup(p => p.TypeID, p => p.NoticeID);

一般来说,查找更加清晰:

  • 他们是不可变的,而你的方法最终会得到可以修改的列表
  • 他们在类型系统中表达了您正在尝试表达的内容(一个关键指向多个值)
  • 通过返回缺失键的空值序列而不是抛出异常
  • ,可以更轻松地查找键