我有一个列表,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/