我有一个班级列表
List<Example> exampleList
其中已包含所有数据。我需要创建一个字典
Dictionary<string, List<Example>> exampleDictionary
Key需要是Example.Name,值需要Example
以下是我的代码。问题是Example.Name可以是相同的。我需要按姓名分组。我需要遍历我的列表,如果Name不存在,则添加新的Key和Value,否则将Value添加到Key。我知道我设置错了,但我似乎无法弄清楚这样做的正确方法。
foreach(var x in exampleList)
{
if(!exampleDictionary.ContainsKey(x.Name)
exampleDictionary.Add(x.Name, x)
else
exampleDictionary[x.Name] = x;
}
我知道这段代码不会构建。我不知道如何设置它。
答案 0 :(得分:4)
您可以使用var lookup = exampleList.ToLookUp(e => e.Name);
扩展方法:
Lookup<string, Example>
此方法返回Name
,这是一对多字典,用于将键映射到值集合。
但您的代码可以按exampleDictionary
固定分组,并将每个组添加到foreach (var g in exampleList.GroupBy(e => e.Name))
exampleDictionary.Add(g.Key, g.ToList());
:
var exampleDictionary = exampleList.GroupBy(e => e.Name).ToDictionary(g => g.Key, g => g.ToList());
或者
{{1}}
答案 1 :(得分:1)
这应该有效
Dictionary<string, List<Example>> exampleDictionary = new Dictionary<string, List<Example>>();
foreach(var x in exampleList)
{
if(!exampleDictionary.ContainsKey(x.Name)) {
exampleDictionary[x.Name] = new List<Example>();
}
exampleDictionary[x.Name].Add(x);
}
答案 2 :(得分:1)
您还可以使用ToDictionary
扩展方法来实现您的目标:
Dictionary<string, List<Example>> exampleDictionary=exampleList.GroupBy(e => e.Name)
.ToDictionary(g => g.Key,g.ToList());
答案 3 :(得分:1)
基本上与user469104(+1)
相同List<Example> le = new List<Example>() { new Example("one"), new Example("one"), new Example("two") };
Dictionary<string, List<Example>> de = new Dictionary<string,List<Example>>();
foreach (Example e in le)
{
if (de.ContainsKey(e.Name))
de[e.Name].Add(e);
else
de.Add(e.Name, new List<Example>() { e });
}