摆脱List<>中的重复项包含在字典中

时间:2013-02-25 10:38:24

标签: c# list dictionary

我有以下字典。

Dictionary<string, List<string>> dictSubjects = new Dictionary<string, List<string>>();

我试图摆脱相应词典条目的每个列表实例中的潜在重复。

这是我尝试的但是在列表中只读取的错误

foreach (var kvp in dictSubjects)
        {
            lstSubjectsNoDupes.Clear();
            for (int i = kvp.Value.Count - 1; i >= 0; i--)
            {
                if(lstSubjectsNoDupes.Contains(kvp.Value[i]))
                {
                   lstSubjectsNoDupes.Add(kvp.Value[i]); 
                }
            }
            kvp.Value = lstSubjectsNoDupes;

        }

如何有效摆脱每个词典列表中的潜在重复项?

2 个答案:

答案 0 :(得分:3)

如果你不太关心效率,最简单的方法是:

dictSubjects = dictSubjects.ToDictionary(pair => pair.Key,
                                         pair => pair.Value.Distinct().ToList());

或者,要更新现有字典:

foreach (var key in dictSubjects.Keys.ToList())
{
    dictSubjects[key] = dictSubjects[key].Distinct().ToList();
}

请注意,此处使用ToList可避免迭代正在修改的集合的视图。如果没有这个,就会抛出InvalidOperationException

答案 1 :(得分:1)

怎么样?
foreach (var kvp in dictSubjects.ToList())
    dictSubjects[kvp.Key] = kvp.Value.Distinct().ToList();