Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
辞書.TryGetValue() / ContainsKey()
辞書から安全に値を取得する『TryGetValue()』と、指定したキーが存在するか確認する『ContainsKey()』メソッドです。
構文
using System.Collections.Generic; // キーが存在する場合は true と値を返します。存在しない場合は false と既定値を返します。 辞書.TryGetValue(TKey key, out TValue value) // 指定したキーが辞書に存在する場合は true を返します。 辞書.ContainsKey(TKey key) // 指定した値が辞書に存在する場合は true を返します(キーとは違い O(n) の処理です)。 辞書.ContainsValue(TValue value)
メソッド一覧
| メソッド | 概要 |
|---|---|
| TryGetValue(TKey key, out TValue value) | キーが存在する場合は true を返し、out パラメーターに値を格納します。存在しない場合は false を返し、value には型の既定値が入ります。 |
| ContainsKey(TKey key) | 辞書に指定したキーが含まれる場合は true を返します。ハッシュを使って O(1) で検索します。 |
| ContainsValue(TValue value) | 辞書に指定した値が含まれる場合は true を返します。内部を順番に走査するため O(n) になります。 |
サンプルコード
using System;
using System.Collections.Generic;
Dictionary<string, int> 点数表 = new Dictionary<string, int>
{
{ "田中", 85 },
{ "佐藤", 92 },
{ "鈴木", 78 }
};
// TryGetValue() で安全に値を取得します。
if (点数表.TryGetValue("佐藤", out int 佐藤の点数))
{
Console.WriteLine($"佐藤さんの点数: {佐藤の点数}"); // 佐藤さんの点数: 92
}
// キーが存在しない場合は false を返します。
if (!点数表.TryGetValue("山田", out int 山田の点数))
{
Console.WriteLine($"山田さんのデータがありません。値: {山田の点数}"); // 値: 0(既定値)
}
// ContainsKey() で存在確認をしてから追加します。
string 新規キー = "山田";
if (!点数表.ContainsKey(新規キー))
{
点数表.Add(新規キー, 70);
Console.WriteLine($"{新規キー} を追加しました。");
}
// ContainsValue() で値の存在を確認します。
Console.WriteLine(点数表.ContainsValue(92)); // True
Console.WriteLine(点数表.ContainsValue(100)); // False
概要
辞書のインデクサー 辞書[key] で存在しないキーを取得すると KeyNotFoundException がスローされます。キーが存在するか確かめてから取得したい場合は、if + ContainsKey() の2段階よりも『TryGetValue()』の1回の呼び出しで済む方が効率的です。
辞書のキー・値一覧の取得とループには『Keys / Values / foreach』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。