c# - 列表到字典 <Key, List<Value>> - C#

标签 c# list dictionary

我有一个列表,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属性,值为所有 NoticeID 的列表对应于 TypeID 的值.我试过这样:

list.GroupBy(p => p.TypeID).ToDictionary(p => p.Key, p => p.ToList())

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

最佳答案

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

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);

一般来说,查找要干净得多:

  • 它们是不可变的,而您的方法以可以修改的列表结尾
  • 它们在类型系统中准确表达了您想要表达的内容(一个键指向多个值)
  • 它们通过为丢失的键返回空值序列而不是抛出异常来使查找键更容易

关于c# - 列表到字典 <Key, List<Value>> - C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29026712/

相关文章:

c# - 在 WPF 中使用 Unity 解析时,SynchronizationContext.Current 为空

python - 如何将 Python 字典序列化为字符串,然后再返回字典?

python - DefaultDict ,在附加元素上,维护按添加顺序排序的键

c# - 无法序列化泛型类型

c# - SQLConnection 使用随机命名管道而不是 tcp

c# - 不能将 int 转换为 T,其中 T 是 bool。有没有办法用 C# 做到这一点?

excel - 如何在Excel中的列中应用分组值

python - 如何检查是否有可能通过删除 python 中的一个元素来获得递增列表?

python - 为什么我不能调用 del [ :] on a dict?

java - 对或多个整数进行排序。有没有比数组更好的方法?