将类列表添加到Dictionary C#

时间:2016-04-08 16:11:29

标签: c# list dictionary

我有一个班级列表

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

我知道这段代码不会构建。我不知道如何设置它。

4 个答案:

答案 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 });
}