列表到词典<键,列表<值>> - C#

rar*_*esm 7 c# dictionary list

我有一个List和MyClass是:

public class MyClass
{
    public bool Selected { get; set; }
    public Guid NoticeID { get; set; }
    public Guid TypeID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

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

list.GroupBy(p => p.TypeID).ToDictionary(p => p.Key, p => p.ToList())
Run Code Online (Sandbox Code Playgroud)

但这会返回一个Dictionary <Guid, List<MyClass>>,我想要一个Dictionary<Guid, List<Guid>>.

Jon*_*eet 19

好吧,当你分组时,你可以为组的每个元素指定你想要的值:

var dictionary = list.GroupBy(p => p.TypeID, p => p.NoticeID)
                     .ToDictionary(p => p.Key, p => p.ToList());
Run Code Online (Sandbox Code Playgroud)

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

var lookup = list.ToLookup(p => p.TypeID, p => p.NoticeID);
Run Code Online (Sandbox Code Playgroud)

查询通常更清晰:

  • 它们是不可变的,而你的方法最终会得到可以修改的列表
  • 它们在类型系统中表达了您想要表达的内容(多个值的一个键)
  • 它们通过返回缺失键的空值序列而不是抛出异常,使查找键变得更容易

  • 感谢您向我介绍一种非常聪明和方便的类型 - 可以确认仍然使用这样的列表字典的人,这种方法更适合用途 (2认同)