0

私は次の辞書を持っています。

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;

        }

辞書の各リスト内の潜在的な重複を効果的に取り除くにはどうすればよいですか?

4

2 に答える 2

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変更中のコレクションのビューの反復処理を避けるために、here を使用することに注意してください。これがなければ、InvalidOperationException投げられます。

于 2013-02-25T10:43:04.560 に答える
1

どうですか

foreach (var kvp in dictSubjects.ToList())
    dictSubjects[kvp.Key] = kvp.Value.Distinct().ToList();
于 2013-02-25T10:43:34.397 に答える