1. ホーム
  2. c#

[解決済み] Linqを使ってリストを辞書に変換し、重複を気にしないようにする。

2022-04-14 08:18:58

質問

Personオブジェクトのリストがあります。キーが姓名(連結)、値がPersonオブジェクトであるDictionaryに変換したいのですが、どうすればよいですか?

問題は、重複している人がいることで、このコードを使用すると爆発してしまうことです。

private Dictionary<string, Person> _people = new Dictionary<string, Person>();

_people = personList.ToDictionary(
    e => e.FirstandLastName,
    StringComparer.OrdinalIgnoreCase);

変な話ですが、今のところ名前の重複はあまり気にしていません。複数の名前がある場合は、1つだけ取り出したいのです。どうにかして、上記のコードを書いて、名前の1つを取得するだけで、重複していても吹き飛ばされないようにすることはできないのでしょうか?

どのように解決するのですか?

これは、明白な、linqではない解決策です。

foreach(var person in personList)
{
  if(!myDictionary.ContainsKey(person.FirstAndLastName))
    myDictionary.Add(person.FirstAndLastName, person);
}

常に最後に追加されたものが表示されることを気にしないのであれば、このように二重ルックアップを回避することができます。

foreach(var person in personList)
{
    myDictionary[person.FirstAndLastName] = person;
}