从包含重复项的列表创建字典

时间:2014-07-07 19:32:09

标签: c# dictionary

我的情况是我有一个List<MyObject>MyObject有一个属性ID。我想从该列表中创建一个字典:

        var myDic = MyList.ToDictionary(e => e.ID);

问题是有时我会有一些重复的ID。在这种情况下,我想将第一个项目存储到字典中并忽略其余项目,并在可能的情况下对跳过的项目进行某种通知。

现在我正在获取一个Exception,告诉我列表中有重复的键,但我不能/不想修改原始列表。有没有办法在不创建没有重复ID的新列表的情况下执行任务?

2 个答案:

答案 0 :(得分:7)

var myDic = MyList.ToLookup(x => x.ID)
                  .ToDictionary(x => x.Key, x => x.First());

答案 1 :(得分:5)

首先按该属性对项目进行分组,然后您可以从该组中提取您想要的第一个/最后一个/随机/任意值。

var dictionary = list.GroupBy(item => item.ID)
    .ToDictionary(group => group.Key, group => group.First());