C# の Dictionary は同じキーの二重登録ができません。同じキーを追加しようとするとコンパイルエラーが出ます。
using System.Collections.Generic;
public class Sample
{
public static void Main()
{
var testDic = new Dictionary<string, int>();
testDic.Add("国語", 80);
testDic.Add("英語", 90);
testDic.Add("数学", 75);
testDic.Add("数学", 100); // エラー:キーには既に"数学"が存在します
}
}
本記事では Dictionary でデータを追加する際、既にキーや値が存在するか事前にチェックする方法を紹介します。
Dictionary の初期化方法については以下の記事で紹介しています。
【C#】配列, List, Dictionary の初期化方法まとめ
目次
Dictionary のキーや値の存在チェック方法
Dictionary のキーが存在するか確認する方法(ContainsKey)
ContainsKey
を使うことで、Dictionary に指定のキーが存在しているか確認できます。
using System;
using System.Collections.Generic;
public class Sample
{
public static void Main()
{
var testDic = new Dictionary<string, int>();
testDic.Add("国語", 80);
// 指定のキーが含まれるかチェック
if (testDic.ContainsKey("国語"))
{
Console.WriteLine("既にキーに「国語」は含まれています");
}
}
}
出力結果
キーに「国語」は含まれています
Dictionary の値が存在するか確認する方法(ContainsValue)
ContainsValue
を使うことで、Dictionary に指定の値(Value)が存在しているか確認できます。
using System;
using System.Collections.Generic;
public class Sample
{
public static void Main()
{
var testDic = new Dictionary<string, int>();
testDic.Add("国語", 80);
// 指定の値(Value)が含まれるかチェック
if (testDic.ContainsValue(80))
{
Console.WriteLine("既に値に「80」は含まれています");
}
}
}
出力結果
値に「80」は含まれています
Dictionary にキーが無ければ追加する方法(TryAdd)
TryAdd
メソッドを使えば、既に Dictionary にキーがない場合にのみ追加されます。
返り値が bool
型なので、if 文でキーの追加に成功 / 失敗した場合の処理を書くことも可能です。
using System.Collections.Generic;
public class Sample
{
public static void Main()
{
var testDic = new Dictionary<string, int>();
testDic.Add("国語", 80);
testDic.TryAdd("数学", 90);
if (testDic.TryAdd("数学", 70))
{
// キーの追加に成功した場合の処理
}
else
{
// キーの追加に失敗した場合の処理
}
}
}
TryAdd
は、追加するキーが null
の場合はエラーが出るのでご注意ください。
参考リンク
- Dictionary<TKey,TValue>.ContainsKey(TKey) メソッド | Microsoft Learn
- Dictionary<TKey,TValue>.ContainsValue(TValue) メソッド | Microsoft Learn
- Dictionary<TKey,TValue>.TryAdd(TKey, TValue) メソッド | Microsoft Learn
関連記事
【C#】Dictionary で値 ( Value ) の全要素の合計値を計算する方法【C#】Dictionary の要素を foreach で順番に取得する方法